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。
您的代码是一个很好的例子,说明了为什么使用全局变量通常是一个可怕的想法。