Я работаю над сценарием 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?
Заранее спасибо !!