问题描述
我有一个由 4 个具有固定长度的双端队列组成的列表。我制作了这份清单,希望它能像其他清单一样更新。这是一个简单的例子:
class foo():
def __init__(self):
self.buffer_size = 300
self.a = collections.deque([0]*self.buffer_size,self.buffer_size
self.b = collections.deque([0]*self.buffer_size,self.buffer_size
self.c = collections.deque([0]*self.buffer_size,self.buffer_size
self.d = collections.deque([0]*self.buffer_size,self.buffer_size
self.buffers = [list(self.a),list(self.b),list(self.c),list(self.d)]
def do_something(self):
## here I append to these deques so that the values in them changes
for i in range(20):
self.a.append(i)
self.b.append(i)
def _buffers(self):
## buffers will still be all zeros
print(self.buffers)
F = foo()
F.do_something()
F._buffers()
我的问题是为什么它仍然只是零?当它里面的双端队列发生变化时,它为什么不更新?关于如何实现这一目标的想法?
解决方法
事实证明,问题在于我在 self.buffers 的初始化中将双端队列转换为列表。我怀疑发生这种情况的原因是,当创建该列表时,它指向内存中完全不同的位置,不再受更改的影响。