У меня есть случай, когда объект из одного класса передается (как часть инициализации) другому классу.
Один из классов, вообще говоря, обновит объект, а другой выведет его (без изменений объекта). Это будет происходить в отдельных темах.
import threading
import time
import random
class Consumer:
def __init__(self):
self.data = []
def print(self):
while True:
print(self.data)
time.sleep(1)
class Producer:
def __init__(self, data):
self.data = data
def update(self):
while True:
self.data.append(random.random())
consumer = Consumer()
producer = Producer(consumer.data)
threading.Thread(target=consumer.print).run()
threading.Thread(target=producer.update).run()
Я думал, что data
и self.data
(в обоих классах) в конечном итоге будут указывать на одни и те же данные, но это не так: на выходе получается набор []
, который показывает, что изменения в Producer
не отражены в Consumer
.
Я, вероятно, в конечном итоге перепроектирую код, чтобы избежать подобных уловок, но мне бы очень хотелось понять, где произошла копия data
(что объясняет, почему все не указывает на одну и ту же память)