在Python中,当我从内置类型int创建三个对象并赋予它们相同的值时,它们将具有相同的引用,但是当我从类创建三个对象并赋予它们不同的值时,它们将具有不同的引用?
示例:
A=20
B=20
C=20
print(id(A))
print(id(B))
print(id(C))
#All the objects give me the same reference
#but my class
A= MyClass()
B= MyClass()
C= MyClass()
print(id(A))
print(id(B))
print(id(C))
#All the objects give me difference reference
我想知道是什么原因。
谢谢有人回答我。
我尝试了很多,但我对引用感到困惑
发生这种情况的原因是因为优化。 Python 在缓存中存储一些整数(几百个)(准确地说是从 -5 到 256)。因此,每当您在该范围内创建
int
类型的实例时,它将始终具有相同的 id
。尝试做一下
A=20_000
B=20_000
C=20_000
print(id(A))
print(id(B))
print(id(C))
亲自看看。
Python 在这种情况下所做的是内存保护。由于已经存在一个指向值 20 的地址,因此没有必要创建新地址。不过,这对于类来说是不同的,因为每次引用一个类时,它都会为变量创建一个新的类对象。