gpt4 book ai didi

python - 为什么类变量会改变?

转载 作者:太空宇宙 更新时间:2023-11-04 09:07:28 24 4
gpt4 key购买 nike

所以我在 python 中编写了一些东西,它必须将类变量分配给实例变量,然后在 init 方法中更改实例变量。我稍微简化了代码,当我运行它时,类变量也发生了变化:

class Map():
map = [1,2,3]

def __init__(self):
self.map = Map.map
for i in range(len(self.map)):
self.map[i] = self.map[i] * 2

print("self.map =", self.map)
print("Map.map =", Map.map)

new_map = Map()

当我运行它时,我得到以下输出:

self.map = [1, 4, 9]
Map.map = [1, 4, 9]

基本上我想知道为什么即使我只更改了 self.map,Map.map 也会更改?

最佳答案

你要的是这个:

    self.map = Map.map[:]

原因是当你做 self.map = Map.map , self.map指向与 Map.map 相同的对象.所以当你改变 self.map你也在变异Map.map因为是同一个对象。这与这里的现象相同:

>>> a = [1, 2, 3]
>>> b = a
>>> b[0] = 4
>>> a
[4, 2, 3]
>>> b is a
True

您要做的是复制对象。您可以通过执行 list(a) 来复制列表或 a[:] :

>>> a = [1, 2, 3]
>>> b = a[:]
>>> b[0] = 4
>>> a
[1, 2, 3]
>>> b
[4, 2, 3]
>>> b is a
False

关于python - 为什么类变量会改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18788878/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com