Если разрезание не создает копию списка, ни действительно перечисляет (), как я могу получить реальную копию своего списка?

[navigationController.navigationBar setBarStyle:UIBarStyleBlack];
10
задан PyNEwbie 4 June 2009 в 01:44
поделиться

2 ответа

Нарезка создает мелкую копию . В вашем примере я вижу, что вы вызываете insert () для item [-1] , что означает, что этот элемент является списком списков. Это означает, что ваши неглубокие копии по-прежнему ссылаются на исходные объекты. Вы можете думать об этом как о создании копий указателей, а не реальных объектов.

Ваше решение заключается в использовании вместо этого глубоких копий . Python предоставляет модуль копирования как раз для такого рода вещей. При поиске вы найдете гораздо больше информации о неглубоком и глубоком копировании.

24
ответ дан 3 December 2019 в 15:36
поделиться

Если вы копируете объект, его содержимое не копируется. Вероятно, в большинстве случаев это то, что вам нужно. В вашем случае вы должны убедиться, что содержимое копируется самостоятельно. Вы можете использовать copy.deepcopy, но если у вас есть список списков или что-то подобное, я бы рекомендовал использовать copy = [l [:] для l в list_of_lists] , это должно быть намного быстрее.

Небольшое примечание к вашему стилю кода:

  • del - это инструкция, а не функция, поэтому лучше не использовать там скобки, они просто сбивают с толку.
  • Пробелы вокруг операторов и после запятых облегчат чтение вашего кода.
  • list (alist) копирует список, но он не более питонический, чем alist [:], я думаю, что alist [:] используется даже чаще, чем альтернатива.
4
ответ дан 3 December 2019 в 15:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: