pythonnumpycopydeque

Initialize deque efficiently


I am using a deque to store data that is going to be processed. The processing only starts when the deque is full so in a first step I fill my buffer the following way:

from collections import deque
import numpy as np

my_deque = deque(maxlen=10)
dims = (20, 20)
my_deque.extend([np.ones(dims)] * 10)

However, when I do this and I modify one of the elements of my_deque, all elements of my_deque are modified.

One alternative I found to avoid this issue is to initialize my deque the following way

for i in range(10):
    my_deque.append(np.ones(dims))

Is there a more elegant way to achieve this?

Edit: One example of modification that create the issue is the following

my_deque[7][2, :] = 0

After this line of code, the third row of every element of my_deque is a row of zeros, not just the one at index 7


Solution

  • @MichaelSzczesny's comment was the right answer, it seems to have been deleted so I post it here:

    from collections import deque
    import numpy as np
    
    my_deque = deque(maxlen=10)
    dimensions = (10, 20, 20)
    my_deque.extend(np.ones(dimensions))