有没有办法用canonic操作创建一个全新的对象?我对下面的例子感到有点困惑:
x = 1
y = int.__new__(int, 1)
print x is y
>> True
编辑:
“is” operator behaves unexpectedly with integers重点介绍上面的示例,但没有回答关于存在创建两个不同int
对象的canonic方法的问题。最后,理解写x = 256; y = 256
是而不是解决方案只是有帮助,这不是我想要的。
答案 0 :(得分:4)
有没有办法用canonic操作创建一个全新的对象?
For the object 1
? No. For other integers, yes。在python中,对象是指向对象实例的引用。 python中的int
是存在于堆上的对象,所有1
的python变量实际上都是指向堆对象(存储int
对象)的对象引用。在python中, -5到256之间的所有数字都有专用的int
个对象,因此对它们的引用始终相等。
当前的实施保持了 所有的整数对象数组 -5到256之间的整数,当你 在你的范围内创建一个int 实际上只是回来参考 现有的对象。所以它应该是 可以改变1的值 怀疑Python的行为 这种情况是未定义的。 : - )
有关更多说明,see this SO post,python中的所有类型都是值类型。