Итак, я так понимаю:
a_list = [1,2,3]
b_list = [5,6,7]
a_list.append(b_list)
a_list в настоящее время [1,2,3, [5,6,7]]
c_list = a_list[:]
b_list[0] = 1000
print(a_list, c_list)
список [1,2,3,[1000,6,7]]
c_list это [1,2,3,[1000,6,7]]
a_list
и c_list
оба изменены, потому что, когда b_list
было добавлено к a_list
, b_list
было ссылкой на [5,6,7]
, и любое изменение в b_list
показывает изменение в a_list
и c_list
. Это хорошо.
Проблема в том, когда у вас есть:
a_list = [1, 2, [1,5,0]]
b_list = a_list[:]
a_list[2][1] = 90000
print(a_list, b_list)
a_list
— это [1, 2, [1, 90000, 0]]
, а b_list
— это [1, 2, [1, 90000, 0]]
.
Почему b_list
изменилось? b_list
— это неглубокая копия a_list
, которая, если бы у нее были ссылки, копировала бы ссылки, а не фактические объекты. Однако у a_list
нет ссылок для копирования; это точное значение, список чисел, и b_list
не должно меняться, если какое-то значение в a_list изменилось, поскольку они совершенно разные, b_list
не указывает на a_list
через присваивание.
copy.deepcopy
. - person Tom Karzes   schedule 06.11.2017