Python id()
时间:2020-02-23 14:42:47 来源:igfitidea点击:
Python id()函数返回对象的"身份"。
对象的身份是整数,在此对象的生存期内,保证该对象是唯一且恒定的。
具有不重叠生存期的两个对象可能具有相同的id()值。
在CPython实现中,这是内存中对象的地址。
Python id()
Python缓存了常用数据类型的id()值,例如字符串,整数,元组等。
因此,您可能会发现多个变量引用同一对象,并且如果它们的值相同,则它们具有相同的id()值。
让我们用一个例子来检查一下。
# integers a = 10 b = 10 c = 11 d = 12 print(id(a)) print(id(b)) print(id(c)) print(id(d))
输出:
4317900064 4317900064 4317900096 4317900128
请注意," a"和" b"的id()值相同,它们具有相同的整数值。
让我们看看我们是否也通过字符串和元组得到类似的行为?
# tuples t = ('A', 'B') print(id(t)) t1 = ('A', 'B') print(id(t1)) # strings s1 = 'ABC' s2 = 'ABC' print(id(s1)) print(id(s2))
输出:
4320130056 4320130056 4320080816 4320080816
从输出中可以明显看出,Python缓存了字符串和元组对象,并使用它们来节省内存空间。
缓存仅适用于不可变的对象,请注意整数,字符串和元组是不可变的。
因此,Python实现可以使用缓存来节省内存空间并提高性能。
我们知道字典不是一成不变的,让我们看看即使字典的元素相同,不同字典的id()是否也不同?
# dict d1 = {"A": 1, "B": 2} d2 = {"A": 1, "B": 2} print(id(d1)) print(id(d2))
输出:
4519884624 4519884768
正如我们所想,dict对象返回的id()值不同,并且这里似乎没有缓存。
自定义对象的Python id()
让我们看一个简单的示例,获取自定义对象的id()值。
class Emp: a = 0 e1 = Emp() e2 = Emp() print(id(e1)) print(id(e2))
输出:
4520251744 4520251856