a = [1,2,3]
b =[]
b.append(a)
print a
print b[0]
a = [2,3,4,5]
print a
print b[0]
这里 b[0] 和 a 在脚本结束时不一样
在这个来自 twisted 的示例中,我们可以通过将协议推送到工厂中的列表来访问协议。
from twisted.internet.protocol import Protocol, Factory
from twisted.internet import reactor
class MultiEcho(Protocol):
def __init__(self, factory):
self.factory = factory
def connectionMade(self):
self.factory.echoers.append(self)
def dataReceived(self, data):
for echoer in self.factory.echoers:
echoer.transport.write(data)
def connectionLost(self, reason):
self.factory.echoers.remove(self)
class MultiEchoFactory(Factory):
def __init__(self):
self.echoers = []
def buildProtocol(self, addr):
return MultiEcho(self)
reactor.listenTCP(4321, MultiEchoFactory())
reactor.run()
因此,如果每个 tcp 连接的不同协议发生任何变化, factory.echoers 是如何指向这个修改后的协议对象的呢?