当我从内置类型 int 创建三个对象并赋予它们相同的值时,它们将具有相同的引用,但是当我从类创建三个对象并赋予它们不同的值时,它们将具有不同的引用。
示例:
A=20
B=20
C=20
print(id(A))
print(id(B))
print(id(C))
所有对象都给我相同的参考。
但是我的班级
A = MyClass()
B = MyClass()
C = MyClass()
print(id(A))
print(id(B))
print(id(C))
所有的物体都给了我不同的参考。
原因是什么?
Python 在这种情况下所做的是内存保护。由于已经存在一个指向值 20 的地址,因此没有必要创建新地址。不过,这对于类来说是不同的,因为每次引用一个类时,它都会为变量创建一个新的类对象。
发生这种情况的原因是因为优化。 Python 在缓存中存储一些整数(几百个)(准确地说是从 -5 到 256)。因此,每当您在该范围内创建
int
类型的实例时,它将始终具有相同的 id
。尝试做一下
A=20_000
B=20_000
C=20_000
print(id(A))
print(id(B))
print(id(C))
亲自看看。