在python中,让我们运行以下代码行:
x = 0
y = x
x += 1
print(y)
print(x)
尽管我们在行2中设置了x=y
,但输出的第一行与第二行明显不同。
但是,有没有办法像x
一样更新y
?
答案 0 :(得分:1)
我正在使用observer design pattern:
#!/usr/bin/env python
# -*-coding: utf-8 -*-
class X:
def __init__(self, subject):
self.subject = subject
self.subject.register(self)
self.update()
def update(self):
self.data = self.subject.data
class Y:
def __init__(self, data=10):
self.data = data
self._observers = list()
def set(self, value):
self.data = value
self.notify()
def register(self, observer):
self._observers.append(observer)
def notify(self):
for ob in self._observers:
ob.update()
y = Y(1)
x = X(y)
assert x.data == 1 and y.data == 1
y.set(20)
assert x.data == 20 and y.data == 20
y.set(-1)
assert x.data == -1 and y.data == -1
答案 1 :(得分:1)
要扩展@juanpa的评论,如果将值包装在列表中,则会出现此现象:
x = [0]
y = x
x[0] += 1
print(y[0])
print(x[0])