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

Python 2.7 如何在Python中规范地创建一个全新的对象,python-2.7,Python 2.7,有没有一种方法可以创建一个具有规范操作的全新对象?下面的例子让我有点困惑: x = 1 y = int.__new__(int, 1) print x is y >> True 编辑: 启发了上面的例子,但没有回答关于创建两个不同int对象的规范方法是否存在的问题。最后,它只是有助于理解写x=256;y=256不是一个解决方案,这不是我想要的 有没有一种方法可以创建一个具有规范操作的全新对象 。在python中,对象是指向对象实例的引用。python中的int是堆上存在的对象,所

有没有一种方法可以创建一个具有规范操作的全新对象?下面的例子让我有点困惑:

x = 1
y = int.__new__(int, 1)
print x is y

>> True
编辑:

启发了上面的例子,但没有回答关于创建两个不同int对象的规范方法是否存在的问题。最后,它只是有助于理解写x=256;y=256不是一个解决方案,这不是我想要的

有没有一种方法可以创建一个具有规范操作的全新对象

。在python中,对象是指向对象实例的引用。python中的int是堆上存在的对象,所有1的python变量实际上都是指向存储int对象的堆对象的对象引用。在python中,-5到256之间的所有数字都有专用的int对象,因此对它们的引用总是相等的

:

当前的实现保持了 所有对象的整数对象数组 如果选择-5和256之间的整数 在指定的范围内创建一个int 事实上,只需要回一个参考 现有对象。应该如此 可以更改1的值。我 怀疑Python在中的行为 此案例未定义:-


为了进一步澄清,python中的所有类型实际上都是值类型。

关键是x和y是指向同一内容的引用。我进一步将代码赋值为2,并了解到x不再是y。这个关于引用的概念对于理解PythonI中一些潜在的gotcha是至关重要的,我也被这个例子弄糊涂了。。。x是y位,我认为这是一个特定于CPython的优化,并演示了它并没有创建一个全新的对象。这个例子应该展示什么?@PyNEwbie你需要了解不可变和可变的-整数是前者。请参阅@jornsharpe伟大链接