我正在编写一个 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']]
所以上面的内容很简单(希望如此)。 (假设我除了复制列表 l 之外还想做其他事情。只是想保持简单)。
但现在这是我没有得到的部分。
>>> 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']]
当我想修改子列表中的第一部分并将其保存到新列表“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']]
和上面的问题类似,为什么y和t变了?
提前致谢!
请您参考如下方法:
Python 只有 引用。 row 是对 l 或 y 中实际元素的引用。改变 row 会改变该元素,并将其添加到另一个对象会添加原始元素。
