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

4

1 回答 1

8

你误解了你的第一个例子。a并且b不一样,因为您只是反弹a到不同的值。如果您不这样做,而是修改了a- 例如,通过这样做a[0] = 3,您会看到它b[0][0]也是 3。

于 2013-04-28T14:37:09.033 回答