如何将对象附加到python中的列表工作?

时间:2013-04-28 14:34:40

标签: python twisted

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如何指向这个修改过的协议对象?

1 个答案:

答案 0 :(得分:8)

你误解了你的第一个例子。 ab不一样,因为您只是将a反弹到不同的值。如果您没有这样做,则修改了a的内容 - 例如,通过执行a[0] = 3,您会看到b[0][0]也是3。