如何在Python中做对象以及内置对象和自定义对象有什么区别?

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

当我从内置类型 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
2个回答
0
投票

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


0
投票

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

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

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

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

亲自看看。

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