你能解释一下双端队列中这个奇怪的 "updating" of np.array 内容吗?
Can you explan this weird "updating" of np.array content inside a deque?
这段代码好像"update"一个双端队列里面的内容?例如
import numpy as np
from collections import deque
buffer = deque()
load = np.array([1])
for loop in range(5):
print(list(buffer))
print(" >>>>> load[0] = loop # .... ...")
load[0] = loop
print(list(buffer))
print(" >>>>> buffer.append ...")
buffer.append([loop, load])
输出=
[]
>>>>> load[0] = loop # .... ...
[]
>>>>> buffer.append ...
[[0, array([0])]]
>>>>> load[0] = loop # .... ...
[[0, array([1])]]
>>>>> buffer.append ...
[[0, array([1])], [1, array([1])]]
>>>>> load[0] = loop # .... ...
[[0, array([2])], [1, array([2])]]
>>>>> buffer.append ...
[[0, array([2])], [1, array([2])], [2, array([2])]]
>>>>> load[0] = loop # .... ...
[[0, array([3])], [1, array([3])], [2, array([3])]]
>>>>> buffer.append ...
[[0, array([3])], [1, array([3])], [2, array([3])], [3, array([3])]]
>>>>> load[0] = loop # .... ...
[[0, array([4])], [1, array([4])], [2, array([4])], [3, array([4])]]
>>>>> buffer.append ...
...如你所见,当数组被赋予新值时,双端队列中的数组内容被更新 ?
deque
持有一个reference单单。您附加到 buffer
的每个元素都指向相同的 np.array
,最初名为 load
.
您的代码中只有一个 load
对象,您的双端队列中的每一项都引用同一个对象。如果您希望它们不同,请在每个循环中创建一个新的:
import numpy as np
from collections import deque
buffer = deque()
for loop in range(5):
print(list(buffer))
print(" >>>>> load[0] = loop # .... ...")
load = np.array([loop])
print(list(buffer))
print(" >>>>> buffer.append ...")
buffer.append([loop, load])
输出:
[]
>>>>> load[0] = loop # .... ...
[]
>>>>> buffer.append ...
[[0, array([0])]]
>>>>> load[0] = loop # .... ...
[[0, array([0])]]
>>>>> buffer.append ...
[[0, array([0])], [1, array([1])]]
>>>>> load[0] = loop # .... ...
[[0, array([0])], [1, array([1])]]
>>>>> buffer.append ...
[[0, array([0])], [1, array([1])], [2, array([2])]]
>>>>> load[0] = loop # .... ...
[[0, array([0])], [1, array([1])], [2, array([2])]]
>>>>> buffer.append ...
[[0, array([0])], [1, array([1])], [2, array([2])], [3, array([3])]]
>>>>> load[0] = loop # .... ...
[[0, array([0])], [1, array([1])], [2, array([2])], [3, array([3])]]
>>>>> buffer.append ...
这段代码好像"update"一个双端队列里面的内容?例如
import numpy as np
from collections import deque
buffer = deque()
load = np.array([1])
for loop in range(5):
print(list(buffer))
print(" >>>>> load[0] = loop # .... ...")
load[0] = loop
print(list(buffer))
print(" >>>>> buffer.append ...")
buffer.append([loop, load])
输出=
[]
>>>>> load[0] = loop # .... ...
[]
>>>>> buffer.append ...
[[0, array([0])]]
>>>>> load[0] = loop # .... ...
[[0, array([1])]]
>>>>> buffer.append ...
[[0, array([1])], [1, array([1])]]
>>>>> load[0] = loop # .... ...
[[0, array([2])], [1, array([2])]]
>>>>> buffer.append ...
[[0, array([2])], [1, array([2])], [2, array([2])]]
>>>>> load[0] = loop # .... ...
[[0, array([3])], [1, array([3])], [2, array([3])]]
>>>>> buffer.append ...
[[0, array([3])], [1, array([3])], [2, array([3])], [3, array([3])]]
>>>>> load[0] = loop # .... ...
[[0, array([4])], [1, array([4])], [2, array([4])], [3, array([4])]]
>>>>> buffer.append ...
...如你所见,当数组被赋予新值时,双端队列中的数组内容被更新 ?
deque
持有一个reference单单。您附加到 buffer
的每个元素都指向相同的 np.array
,最初名为 load
.
您的代码中只有一个 load
对象,您的双端队列中的每一项都引用同一个对象。如果您希望它们不同,请在每个循环中创建一个新的:
import numpy as np
from collections import deque
buffer = deque()
for loop in range(5):
print(list(buffer))
print(" >>>>> load[0] = loop # .... ...")
load = np.array([loop])
print(list(buffer))
print(" >>>>> buffer.append ...")
buffer.append([loop, load])
输出:
[]
>>>>> load[0] = loop # .... ...
[]
>>>>> buffer.append ...
[[0, array([0])]]
>>>>> load[0] = loop # .... ...
[[0, array([0])]]
>>>>> buffer.append ...
[[0, array([0])], [1, array([1])]]
>>>>> load[0] = loop # .... ...
[[0, array([0])], [1, array([1])]]
>>>>> buffer.append ...
[[0, array([0])], [1, array([1])], [2, array([2])]]
>>>>> load[0] = loop # .... ...
[[0, array([0])], [1, array([1])], [2, array([2])]]
>>>>> buffer.append ...
[[0, array([0])], [1, array([1])], [2, array([2])], [3, array([3])]]
>>>>> load[0] = loop # .... ...
[[0, array([0])], [1, array([1])], [2, array([2])], [3, array([3])]]
>>>>> buffer.append ...