Ray*_*szt 1 python variables scope for-loop list
我正在编写一个py脚本,它从csv文件中读取行,操作它们并将它们放回原处.到目前为止,我有csv列出转换工作.
我遇到的问题是当我遍历临时列表时,for循环会更改所有临时列表,而不仅仅是我想要的那个.这是我想说的一个简单例子.
>>> l = [['hi', 'ho'],['no', 'go']]
>>> t = []
>>> y = []
>>>
>>> for row in l:
... row[0] = '123'
... y.append(row)
... t.append(row)
...
>>> y
[['123', 'ho'], ['123', 'go']]
>>> t
[['123', 'ho'], ['123', 'go']]
Run Code Online (Sandbox Code Playgroud)
所以上面的内容很简单(希望如此).(我们假设除了复制列表之外我还想做其他事情.只是想保持简单).
但现在这是我没有得到的部分.
>>> z = []
>>> for row in y:
... row[0] = 'xxxx'
... z.append(row)
...
>>> z
[['xxxx', 'ho'], ['xxxx', 'go']]
>>> t
[['xxxx', 'ho'], ['xxxx', 'go']]
>>> y
[['xxxx', 'ho'], ['xxxx', 'go']]
Run Code Online (Sandbox Code Playgroud)
当我想修改子列表中的第一部分,并将其保存到新列表'z'时,它也会修改列表t!
这里发生了什么?z,y和t是否指向相同的内存位置?
还有,这里发生了什么?:
>>> for rowx in y:
... rowx[0] = 'x55x'
... z.append(rowx)
...
>>> z
[['xxxx', 'ho'], ['x55x', 'go'], ['x55x', 'go'], ['x55x', 'go']]
>>> t
[['xxxx', 'ho'], ['x55x', 'go']]
>>> y
[['xxxx', 'ho'], ['x55x', 'go']]
Run Code Online (Sandbox Code Playgroud)
与上述问题类似,为什么y和t会发生变化?
提前致谢!!
Python有什么,但引用.row是对lor中的实际元素的引用y.Mutating row变异该元素,并将其添加到另一个对象添加原始元素.