【问题标题】:Instance of attributes in an Object [duplicate]对象中的属性实例[重复]
【发布时间】:2018-03-19 17:28:27
【问题描述】:

我在 Python 中有以下顾虑:

a = 1
b = a
b = 2
print(a)

据我了解,b 是一个使用a 值的新变量。因此,当b 的值改变时,不会影响a。所以,print(a) 应该产生1

class Object:
  def __init__(self):
    self.value = 0

a = Object()
a.value = 1
b = a
b.value = 2
print(a.value)

但是,在这种情况下,a 将打印 2。为什么是这样?如何使a.value 仍然是1 而不是2

【问题讨论】:

  • 在第一种情况下,您将 重新绑定 b(即b = ...)到与a 绑定的对象不同的对象。在第二种情况下,您正在mutating ab 都绑定到的对象。
  • 你可以使用copy.deepcopy()Check这个答案。

标签: python class object instance


【解决方案1】:

如果你在cmd中运行这个,设置b = a然后运行:

repr(a)
repr(b)
assert(a == b) # is True

它们位于相同的内存地址。现在运行:

c = Object() 
repr(c)
assert(a == c) # is False
assert(b == c) # is False

你可以看到它们是不同的。

【讨论】:

    猜你喜欢
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 2011-07-28
    • 2021-08-18
    相关资源
    最近更新 更多