为什么我的自定义类的实例具有不同的 id,如果它们具有相同的值,而内置类则不会发生相同的情况? [重复]

问题描述 投票:0回答:2

在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 python-class built-in-types python-builtins
2个回答
-1
投票

发生这种情况的原因是因为优化。 Python 在缓存中存储一些整数(几百个)(准确地说是从 -5 到 256)。因此,每当您在该范围内创建

int
类型的实例时,它将始终具有相同的
id
。尝试做一下

A=20_000
B=20_000
C=20_000

print(id(A))
print(id(B))
print(id(C))

亲自看看。


-2
投票

Python 在这种情况下所做的是内存保护。由于已经存在一个指向值 20 的地址,因此没有必要创建新地址。不过,这对于类来说是不同的,因为每次引用一个类时,它都会为变量创建一个新的类对象。

© www.soinside.com 2019 - 2024. All rights reserved.