You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Python中Queue队列内部存储的列表的元素值

问题原因

你的代码没有生效主要有两个核心问题:

  • 初始化队列时,你四次put的都是同一个列表对象lists,四个队列元素指向同一块内存地址,就算修改生效,四个列表的内容也会完全一致,不可能出现你想要的分段递增效果。
  • 遍历修改列表元素时,for elem in lst拿到的是元素值的临时副本,直接给elem赋值只会修改临时变量,不会改动原列表的内容,必须通过索引赋值才能修改原列表的元素。

解决方法

方法1:直接操作内部队列(单线程场景可用)

首先修正队列初始化逻辑,每次放入新的独立列表,再通过索引遍历修改元素:

import queue
# 初始化队列,每次放入独立列表
data = queue.Queue(maxsize=4)
for i in range(4):
    data.put([None]*3)

# 原地修改元素
x = 1
for lst in data.queue:
    for idx in range(len(lst)):
        lst[idx] = x
        x += 1

print(data.queue)
# 输出:deque([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])

注意:data.queue是queue.Queue的内部非公开属性,仅适合单线程场景下使用,多线程场景下推荐使用方法2。

方法2:通过公开接口操作(兼容多线程,更稳妥)

通过Queue公开的get、put方法操作元素,修改完后重新放回队列,避免直接操作内部属性:

import queue
data = queue.Queue(maxsize=4)
for i in range(4):
    data.put([None]*3)

x = 1
temp = []
# 取出所有元素修改
while not data.empty():
    lst = data.get()
    for idx in range(len(lst)):
        lst[idx] = x
        x += 1
    temp.append(lst)

# 将修改后的元素放回队列
for lst in temp:
    data.put(lst)

print(data.queue)

内容的提问来源于stack exchange,提问作者anti4r

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:45:04