Python, почему это работает во втормо случае?

import copy

# Первый вариант: если создаю свойство вне конструктора, то глубокое копирование не помогает и при изменении
# объекта в переменной a, он изменяется и для переменной b 
class A: 
    a = [1, 2]

a = A()
b = copy.deepcopy(a)
a.a[0] = 5
a.a
[5, 2]
b.a
[5, 2]

# Второй вариант: если создаю свойство в конструкторе, то глубокое копирование помогает и при изменении
# объекта в переменной a, он не изменяется для переменной b 
class A:
    def __init__(self):
        self.a = [1, 2]
 
a = A()
b = copy.deepcopy(a)
a.a[0] = 5
a.a
[5, 2]
b.a
[1, 2]


Почему это так работает ? И в чем различия добавление свойств классу в первом и втором варианте ?
  • Вопрос задан
  • 172 просмотра
Решения вопроса 1
В первом случае а является полем (свойством) класса и оно общее для всех экземпляров класса. Во втором случае поле а принадлежит экземпляру класса (конкретному объекту) а, и для каждого объекта оно свое.
"A Byte of Python" в помощь ;-)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
NeiroNx
@NeiroNx
Программист
Статичные и динамичные свойства
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы