#python-3.x #class #initialization #deep-copy
Вопрос:
Из следующих двух примеров с функцией и без __init__
функции я ожидал бы такого же поведения. Однако поведение отличается (для меня решение с __init__
функцией работает). Чем объясняется такое разное поведение?
Без __init__
:
import numpy as np from copy import deepcopy class abc(): q = np.zeros([2]) def run(self): for i in range(2): Test = deepcopy(self) Test.q[i] = 1e-6 print("self.q:", self.q, "Test.q:", Test.q) self.q = 1 Model = abc() Model.run() print(Model.q) Model = abc() print(Model.q)
Выход:
self.q: [1.e-06 0.e 00] Test.q: [1.e-06 0.e 00] self.q: [1.e-06 1.e-06] Test.q: [1.e-06 1.e-06] [1.000001 1.000001] [1.000001 1.000001]
С __init__
:
import numpy as np from copy import deepcopy class abc(): def __init__(self): self.q = np.zeros([2]) def run(self): for i in range(2): Test = deepcopy(self) Test.q[i] = 1e-6 print("self.q:", self.q, "Test.q:", Test.q) self.q = 1 Model = abc() Model.run() print(Model.q) Model = abc() print(Model.q)
Выход:
self.q: [0. 0.] Test.q: [1.e-06 0.e 00] self.q: [0. 0.] Test.q: [0.e 00 1.e-06] [1. 1.] [0. 0.]