这是我的密码:
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中将列表传递给实例变量,然后在不影响原始列表的情况下更改实例变量?你知道吗
我相信这是因为列表是可变的,而整数是不变的。对列表进行更改后,将返回相同的列表。更改整数后,将返回整数的“副本”。所以
func
改变了x
,但是创建了一个新的y
列表是一个可变对象;赋值复制了引用,因此当您更改一个元素的值时,您就更改了原始对象。你知道吗
整数是不可变的;当您更改值时,Python会使用新值更改对新对象的引用。
self.y
不再引用与y相同的对象。你知道吗相关问题 更多 >
编程相关推荐