Копирование списка объектов и сохранение их свойств в Python - PullRequest
0 голосов
/ 12 марта 2020

Иногда мы не хотим, чтобы все изменилось. В приведенном ниже коде мои оригинальные Things видоизменены, хотя я сделал копию списка, содержащего их. Я не настолько удивлен, но я хотел бы знать, как сохранить исходные свойства моего объекта, чтобы я мог восстановить свой список things точно так, как он был при первом создании.

class Thing:
    def __init__(self, x):
        self.x = x

    def __str__(self):
        return str(self.x)

things = [Thing(10), Thing(20)]
original_things = things.copy()

for thing in things:
    print(thing)
print("All change")
things[0].x = 30
things[1].x = 40
print("Back to the beginning?")
things = original_things
for thing in things:
    print(thing)

1 Ответ

0 голосов
/ 18 марта 2020

Прочитайте документы, Люк!

Python документация для списков говорит:

list. copy (x)

Возвращение мелкой копии списка. Эквивалент a[:].

Следовательно, bar_list = foo_list.copy() эквивалентен bar_list = foo_list.

Что касается @Gphilo, то, что вы хотите, это copy.deepcopy:

from copy import deepcopy
class Thing:
    def __init__(self, x):
        self.x = x

    def __str__(self):
        return str(self.x)

things = [Thing(10), Thing(20)]
original_things = deepcopy(things)

for thing in things:
    print(thing)
print("All change")
things[0].x = 30
things[1].x = 40
print("Back to the beginning!")
things = original_things
for thing in things:
    print(thing)

Выход:

10
20
All change
Back to the beginning!
10
20
...