How can my code discover the name of an object in Python?

In Python, objects don't have inherent names variable names are just labels that point to objects in memory. When multiple variables reference the same object, there's no way to determine which variable name was used to create it.

Why Objects Don't Have Names

Consider this example where both ob1 and ob2 reference the same object ?

# Creating a Demo Class
class Demo:
    pass

# Multiple references to the same object
ob1 = Demo()
ob2 = ob1

print("ob1 identity:", id(ob1))
print("ob2 identity:", id(ob2))
print("Same object?", ob1 is ob2)
ob1 identity: 140234567890123
ob2 identity: 140234567890123
Same object? True

Getting All Instances of a Class

While you can't get object names, you can find all instances of a class using the gc module ?

import gc

# Create a Class
class Demo:
    pass

# Four different objects
ob1 = Demo()
ob2 = Demo()
ob3 = Demo()
ob4 = Demo()

# Display all instances of the Demo class
instances = []
for obj in gc.get_objects():
    if isinstance(obj, Demo):
        instances.append(obj)

print(f"Found {len(instances)} instances of Demo class:")
for i, instance in enumerate(instances, 1):
    print(f"Instance {i}: {instance}")
Found 4 instances of Demo class:
Instance 1: <__main__.Demo object at 0x7f18e74fe4c0>
Instance 2: <__main__.Demo object at 0x7f18e7409d90>
Instance 3: <__main__.Demo object at 0x7f18e7463370>
Instance 4: <__main__.Demo object at 0x7f18e7463400>

Counting Class Instances

You can count instances more efficiently without storing them in a list ?

import gc

# Create a Class
class Demo:
    pass

# Creating 4 objects
ob1 = Demo()
ob2 = Demo()
ob3 = Demo()
ob4 = Demo()

# Count instances using generator expression
instance_count = sum(1 for obj in gc.get_objects() if isinstance(obj, Demo))
print(f"Total instances of Demo class: {instance_count}")
Total instances of Demo class: 4

Alternative: Using Weak References

For tracking instances during runtime, you can use weak references in the class itself ?

import weakref

class Demo:
    instances = weakref.WeakSet()
    
    def __init__(self):
        Demo.instances.add(self)
    
    @classmethod
    def get_instance_count(cls):
        return len(cls.instances)

# Create instances
ob1 = Demo()
ob2 = Demo()
ob3 = Demo()

print(f"Active instances: {Demo.get_instance_count()}")

# Delete one instance
del ob1
print(f"Active instances after deletion: {Demo.get_instance_count()}")
Active instances: 3
Active instances after deletion: 2

Conclusion

Python objects don't have inherent names since variable names are just references. Use gc.get_objects() to find instances or implement instance tracking with weak references for better control.

Updated on: 2026-03-26T21:40:01+05:30

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements