如何在调用时复制我的Class对象(例如迭代时)

时间:2017-12-21 13:06:39

标签: python immutability

我需要我的类在引用时创建对象的新副本。

例如:

obj1 = MyClass(1,2)
obj2 = obj1
obj2.1st_att = 5

>>> print obj1
(5,2)

我希望obj1保持与obj2

的联系

2 个答案:

答案 0 :(得分:1)

在这种情况下你应该copy反对。

from copy import copy
obj1 = MyClass(1,2)
obj2 = copy(obj1)
obj2.1st_att = 5

如果您的课程很复杂并且有很多参考资料,那么也可以进行深度学检查。

答案 1 :(得分:0)

每次将Python分配给不同的变量时,Python都不会复制整数或浮点数。问题是他们不是可变的;你无法对int做任何改变它的事情,所以无论你赋予它多少变量,你都不会有任何令人惊讶的行为。

使用obj2.1st_att = 5,您将显式修改对象的属性。对于int,没有模拟操作。期望此操作修改对象,并且对于持有对该对象的引用的任何其他人都可以看到此更改。

你不应该试图以任何方式解决这种行为,因为这会打破很多期望并导致错误或令人惊讶的行为本身。制作对象的副本是一件很好的事情,你需要采取明确的行动。习惯它。