Почему copy не работает?

class Example:
    def __init__(self):
        self.info={"name":"hi","objs":{"h":{"x":0,"y":0,"width":10,"height":10,'type':'image',"src":"hello","image":pygame.image.load("hello")}}}
    def save(self):
        c=self.info.copy()
        for obj in c['objs']:
            if obj['type']=='image':
                if obj['src']: del obj['image']

После кода почему, то из объекта удаляется глобально "image", из-за чего это?


Ответы (1 шт):

Автор решения: Arseni Mourzenko

copy производит то, что называется shallow copy, то есть копирует только references их одного объекта в другой.

Вы же хотите сделать рекурсивную копию. Для этого есть другая функция, deepcopy.

Если объект содержит другие объекты, которые не позволяют создания копий, то либо переделайте объект так, чтобы он мог копироваться, либо делайте копию вручную. В вашем случае, pygame.Surface содержит метод copy. Вот пример использования (на английском, но по самому коду я думаю понятно, что происходит).

→ Ссылка