这是我的代码:
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中的实例变量,然后更改实例变量而不影响原始列表?
答案 0 :(得分:1)
我相信这是因为列表是可变的,而整数是不可变的。对列表进行更改后,将返回相同的列表。更改整数后,将返回整数的“副本”。因此,func
正在更改x
,但会创建新的y
答案 1 :(得分:0)
该列表是一个可变对象;赋值复制引用,以便在更改一个元素的值时更改原始对象。
整数不可变;当您更改值时,Python会使用新值更改对新对象的引用。 self.y
不再引用与y相同的对象。