如何在Python中规范地创建一个全新的对象

时间:2016-05-24 13:54:23

标签: python-2.7

有没有办法用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而不是解决方案只是有帮助,这不是我想要的。

1 个答案:

答案 0 :(得分:4)

  

有没有办法用canonic操作创建一个全新的对象?

For the object 1? No. For other integers, yes。在python中,对象是指向对象实例的引用。 python中的int是存在于堆上的对象,所有1的python变量实际上都是指向堆对象(存储int对象)的对象引用。在python中, -5到256之间的所有数字都有专用的int个对象,因此对它们的引用始终相等

In Python's documentation

  

当前的实施保持了   所有的整数对象数组   -5到256之间的整数,当你   在你的范围内创建一个int   实际上只是回来参考   现有的对象。所以它应该是   可以改变1的值   怀疑Python的行为   这种情况是未定义的。 : - )

有关更多说明,see this SO post,python中的所有类型都是值类型。