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如何指向这个修改过的协议对象?
答案 0 :(得分:8)
你误解了你的第一个例子。 a
和b
不一样,因为您只是将a
反弹到不同的值。如果您没有这样做,则修改了a
的内容 - 例如,通过执行a[0] = 3
,您会看到b[0][0]
也是3。