python - 你能解释一下双端队列中 np.array 内容的这种奇怪的“更新”吗?
问题描述
这段代码似乎“更新”了双端队列中的内容?例如
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 ...
...如您所见,当数组被分配新值时,双端队列中的数组内容会更新?
解决方案
你的代码中只有一个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 ...
推荐阅读
- python - Pandas 'concat/upsert' 数据帧
- sas - SAS:在 FIFO 基础上减去两个数字的逻辑
- php - 删除 Magento2 上某些类别中的“添加到购物车”按钮
- android - 如何在应用程序强制关闭android上添加代码
- python - 使用 Python 从进程的内存中读取数据
- angular - 如何将数据 + 多个文件从 Angular 上传到 .net core Web Api
- css - 关键帧的混合
- ruby - Ruby On Rails - 新的迁移和模型更改导致迁移失败
- javascript - 等待由不同组件触发的 2 个 API 完成,然后再触发另一个 API
- r - 列在 num 时错误地标记为 int