Wypróbowałem następujące w interpreterze Pythona:
>>>
>>> a = []
>>> b = {1:'one'}
>>> a.append(b)
>>> a
[{1: 'one'}]
>>> b[1] = 'ONE'
>>> a
[{1: 'ONE'}]
>>>
Tutaj po dołączeniu słownika „b” do listy „a” zmieniam wartość odpowiadającą kluczowi 1 w słowniku „a”. W jakiś sposób ta zmiana zostaje również odzwierciedlona na liście. Czy dołączając słownik do listy, nie dołączam tylko wartości słownika? Wygląda na to, że dołączyłem wskaźnik do słownika do listy, a zatem zmiany w słowniku są również odzwierciedlane na liście.
Nie chcę, aby zmiana została odzwierciedlona na liście. Jak mam to zrobić?
Dziękuję za Twój czas!
python
list
dictionary
neo29
źródło
źródło
Odpowiedzi:
Masz rację, ponieważ lista zawiera odniesienie do oryginalnego słownika.
a.append(b.copy())
powinien załatwić sprawę.Pamiętaj, że tworzy to płytką kopię. Alternatywą jest użycie
copy.deepcopy(b)
, które tworzy głęboką kopię.źródło
Również z dyktando
a = [] b = {1:'one'} a.append(dict(b)) print a b[1]='iuqsdgf' print a
wynik
[{1: 'one'}] [{1: 'one'}]
źródło
użyj kopii i głębokiej kopii
źródło