【发布时间】:2015-07-07 17:18:01
【问题描述】:
这些变量赋值按我的预期工作:
>>> a = 3
>>> b = a
>>> print(a, b)
(3, 3)
>>> b=4
>>> print(a, b)
(3, 4)
但是,这些分配的行为不同:
>>> class number():
... def __init__(self, name, number):
... self.name = name
... self.number = number
...
>>> c = number("one", 1)
>>> d = c
>>> print(c.number, d.number)
(1, 1)
>>> d.number = 2
>>> print(c.number, d.number)
(2, 2)
为什么c 与d 相同,而不是(a, b) 示例?我怎样才能在(a, b) 中的(c, d) 类示例中执行类似操作?即复制对象,然后更改其中的一部分(不会影响我借用属性的对象)?
【问题讨论】:
-
当您的变量是可变类型时,这与
variable = variable完全一样。用列表试试。 -
打印类,你会看到类似:
<__main__.number object at 0x7f455b87c7b8> <__main__.number object at 0x7f455b87c7b8>... 注意相同的地址 :-) 所以你设置了一个引用,而不是复制对象。 -
您不会对“variable = object”与“variable = number”感到困惑 - 您对“variable = thing”与“variable.field = thing”感到困惑。
-
这让我想起了我发布的另一个问题的答案,这应该能对此有所了解:stackoverflow.com/questions/3059395/…
标签: python python-2.7 variables object python-3.x