在Python中更改实例变量也会更改原始lis

2024-04-20 13:15:58 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的密码:

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中将列表传递给实例变量,然后在不影响原始列表的情况下更改实例变量?你知道吗


Tags: 实例self密码列表objectfooinitdef
2条回答

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

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

整数是不可变的;当您更改值时,Python会使用新值更改对新对象的引用。self.y不再引用与y相同的对象。你知道吗

相关问题 更多 >