类函数是更改的全局变量


I = [[140,50],[140,80],[140,110],[140,140]]
O = [[140,50],[170,50],[140,80],[170,80]]
tomato = [I,O]

class Change():
def __init__(self,):
self.liste = []

def change(self,):
self.liste.extend(tomato[0])
for i in range(10):
self.liste[0][0] += 10

那个类当ı使用改变方法这个改变全局番茄[0]时,我该如何修复它。

下面是一个说明问题的简化示例。

初始化列表对象x:

x = [0]

初始化另一个列表a,将之前的列表x作为一个元素存储在其中:

a = [x]

初始化另一个列表b并将来自a的元素添加到其中;a中唯一的元素是列表对象x,它现在被附加到b:

b = []
b.extend(a)

这意味着b中的第一个(也是唯一的(元素是相同的列表对象x;不是一个克隆,不是另一个包含其元素的列表,而是完全相同的对象

print(b[0] is x) 

给出True

请注意,我没有检查相等性,而是使用is检查标识

这意味着我可以写

b[0][0] = 1
print(x[0] == 1)

得到CCD_ 13。

您的代码是一个很好的例子,说明了为什么使用全局变量通常是一个可怕的想法。

相关内容

  • 没有找到相关文章

最新更新