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伟大链接