【问题标题】:Changing instance variable in Python also changes original list [duplicate]在 Python 中更改实例变量也会更改原始列表 [重复]
【发布时间】:2018-04-16 12:55:33
【问题描述】:

这是我的代码:

class Foo(object):
    def __init__(self, x, y):
        self.x     = x
        self.y     = y

    def func(self):
        self.x[0] -= 1
        self.y    -= 1


x = [10]
y = 10



a = Foo(x, y)
a.func()

print(x, y)

输出为([9], 10)。为什么将列表传递给实例变量然后更改实例变量也会更改原始列表,但不会更改原始整数?

如何在Python中将一个列表传递给一个实例变量,然后改变实例变量而不影响原来的列表?

【问题讨论】:

  • 快速了解 Python 变量和赋值:nedbatchelder.com/text/names.html
  • 另外,您可能认为您使用的是 Python 3,但 print 输出表明您不是。 (Python 3 会打印出[9] 10。)
  • 谢谢,这有帮助! self.x = list(x) 解决了它

标签: python python-3.x object instance instance-variables


【解决方案1】:

我相信这是因为列表是可变的,而整数是不可变的。对列表进行更改后,将返回相同的列表。更改整数后,将返回整数的“副本”。所以func 改变了x,但是创建了一个新的y

【讨论】:

    【解决方案2】:

    列表是一个可变对象;赋值复制引用,因此当您更改一个元素的值时,您会更改原始对象。

    整数是不可变的;当您更改值时,Python 会更改对具有新值的新对象的引用。 self.y 不再与 y 引用同一个对象。

    【讨论】:

      猜你喜欢
      • 2021-11-03
      • 2014-02-03
      • 2013-11-25
      • 1970-01-01
      • 1970-01-01
      • 2020-08-28
      • 1970-01-01
      • 2015-06-29
      相关资源
      最近更新 更多