модуль copy

Валентин

Новичок
Пользователь
Ноя 13, 2020
114
1
18
Не могу понять, почему в данном примере количество колёс у машины 1, меняется.
Код:
class Car:
    pass

car1 = Car()
car1.wheels = 4
car2 = car1
car2.wheels = 3
print(car1.wheels)

В следующем примере количество колёс у машины 1 не меняются.
Код:
import copy

class Car:
    pass

car1 = Car()
car1.wheels = 4
car2 = car1
car2.wheels = 3
car3 = copy.copy(car1)
car3.wheels = 6
print(car1.wheels)
Объясните пожалуйста эту магию : )
 

serg2a

Новичок
Пользователь
Фев 26, 2021
8
0
1
Не могу понять, почему в данном примере количество колёс у машины 1, меняется.
Код:
class Car:
    pass

car1 = Car()
car1.wheels = 4
car2 = car1
car2.wheels = 3
print(car1.wheels)

В следующем примере количество колёс у машины 1 не меняются.
Код:
import copy

class Car:
    pass

car1 = Car()
car1.wheels = 4
car2 = car1
car2.wheels = 3
car3 = copy.copy(car1)
car3.wheels = 6
print(car1.wheels)
Объясните пожалуйста эту магию : )

Вы имеете в виду что в 1-ом примере их стало 3, а во 2-ом так и осталось 3 а не 6?
 

Валентин

Новичок
Пользователь
Ноя 13, 2020
114
1
18
Вы имеете в виду что в 1-ом примере их стало 3, а во 2-ом так и осталось 3 а не 6?
Да
 

serg2a

Новичок
Пользователь
Фев 26, 2021
8
0
1

а почему их должно стать 6? потому что вы вызвали метод copy из модуля copy класса copy? и он должен был сделать тоже самое что и оператор =?
Если бы это было так, тогда зачем вообще нужно придумывать целый класс который делает тоже самое что и оператор =???

оператором = вы просто указывайте к какому объекту привязываете свою ссылку.

Python:
import copy

class Car:
    pass

car1 = Car()        # Ссылка car1 = экземпляру класса Car(Новый объект_#1)
car1.wheels = 4     # добавть обекту_#1 совство wheels = 4
car2 = car1         # создать ссылку car2 на объект_#1 со свойством wheels = 4
car2.wheels = 3     # изменить совсйтсво wheels = 3 объект_#1
car3 = copy.copy(car1) # СОЗДАТЬ новый ОБЪЕКТ#332 идентичный обекту_#1
car3.wheels = 6     # изменить свойтсво ОБЪЕКТА#332
print(car1.wheels)  # вывести своство объекта_#1 wheels = 3

Вероятно так. но я ток начал изучать питон...
 

Форум IT Специалистов