为何在复制的Python列表上直接追加元素会返回None?
问题原因解析
核心原因很简单:Python中列表的append()方法是原地修改列表,它的返回值固定为None,而不是修改后的列表本身。
咱们拆解两段代码的执行逻辑:
第一段代码的执行流程
mylist = [1] mylist2 = mylist.copy() # 调用copy()生成新列表[1],并把这个新列表赋值给mylist2 mylist2.append(2) # append()原地把mylist2改成[1,2],但返回None,这里我们没接收这个返回值
这里mylist2保存的是copy出来的新列表,append只是在这个列表上做修改,所以最后mylist2的值是预期的[1,2]。
第二段代码的执行流程
mylist2 = mylist.copy().append(2)
这行代码的执行顺序是:
- 先执行
mylist.copy(),得到临时的新列表[1] - 立刻对这个临时列表调用
append(2),确实会把临时列表改成[1,2],但append()返回的是None - 最后把
append()的返回值None赋值给了mylist2,所以mylist2就变成了None
一行代码实现需求的正确写法
如果想在一行内完成复制并添加元素,可以用列表拼接(这种方式会返回新列表):
mylist2 = mylist.copy() + [2]
或者用list()构造器结合切片:
mylist2 = list(mylist) + [2]
内容的提问来源于stack exchange,提问作者orangenhaft
相关产品推荐
相关产品推荐

