Есть ли способ, которым я могу передать только значения списка в словарь, а не ссылку на список? - PullRequest
0 голосов
/ 28 октября 2019

Есть ли способ, которым я могу передать только значения списка в словарь, а не ссылку на список?

*my_list = [1, 2, 3]
my_dict = {"list": my_list}
print(my_dict["list"])
my_list.pop()
print(my_dict["list"])*

в настоящее время вывод: [1, 2, 3] [1, 2]

я хочу, чтобы это было: [1, 2, 3] [1, 2, 3]

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

Создайте копию списка перед добавлением его в dict:

my_dict = {'list': list(my_list)}

В действительности my_dict['list'] ссылается на то же значение, что и my_list, а не на его копию, т.е. делиться данными. Поскольку .pop() деструктивно изменяет список, элемент также теряется в переменной.

См. https://stackoverflow.com/a/2612815/10973209 для обзора способов копирования списка и https://stackoverflow.com/a/430958/10973209 дляобъяснение передачи по ссылке против передачи по значению в целом.

0 голосов
/ 28 октября 2019

Вам следует создать новый список со значениями исходного списка в словаре, чтобы он не изменялся при извлечении из my_list.

my_dict = {"list": [item for item in my_list]}
...