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

关于Python列表实现队列中enqueue函数的两项技术疑问

Python列表实现队列中enqueue函数的疑问解答

首先来看你给出的队列实现代码:

def enqueue(queue, item):
    queue = queue.append(item) #print(queue)
def dequeue(queue):
    return queue.pop(0)
def isEmpty(queue):
    return len(queue)==0
def createQueue():
    return []

针对你围绕enqueue()函数的两个疑问,我来逐一解释:

疑问1:语句中的queue =有何作用?既然list.append()无返回值,为何不省略该赋值操作?

这个queue =完全是多余且错误的写法!

list.append()是一个原地修改列表的方法——它会直接把元素添加到你传入的列表里,而不会返回任何新的列表(返回值固定为None)。你这里把append的返回值(也就是None)赋值给局部变量queue,不仅没有任何实际作用,反而会让这个局部变量和原本传入的队列列表断开引用关系。

正确的写法应该直接去掉赋值,只保留:

def enqueue(queue, item):
    queue.append(item)

这样就足够了,因为列表是可变对象,函数内调用append会直接修改外部传入的那个列表本身,不需要额外赋值。

疑问2:为何queue = queue.append(item)不会将传入的原队列改为None,仅修改局部变量queue?

这要结合Python的变量引用机制来理解:

  1. 当你把列表传给enqueue函数时,函数内部的局部变量queue一开始是指向原列表对象的引用——这时候它和外部的队列变量指向同一个内存里的列表。
  2. 执行queue.append(item)时,是通过这个引用修改了原列表对象本身(所以外部的队列确实会被添加元素);
  3. 但紧接着的queue = ...是把append返回的None赋值给了这个局部变量queue——这一步只是让函数内部的这个局部变量不再指向原列表,转而指向None,但这只是函数内部的局部变量变化,完全不会影响外部的原列表对象,也不会改变外部变量的指向。

你可以做个简单测试验证:

q = createQueue()
enqueue(q, "hello")
print(q)  # 输出 ['hello'],原队列确实被修改了

虽然函数内部的queue变量变成了None,但外部的q依然指向原本的列表,而且已经被append操作修改了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:20:57