Python中list.append()赋值后返回None的原因咨询
Python中list.append()赋值后返回None的原因咨询
嗨,这问题其实是Python里可变对象方法设计的小细节,我给你掰扯清楚~
你写的这段代码:
x = ['a', 'b', 'c'] y = x.append(x[0]) print(y)
之所以打印出None,核心原因是:list.append()是一个「原地修改」的方法。
什么是原地修改?就是它直接在原列表x的内存空间里添加元素,不会创建一个新的列表返回给你。这类方法的设计逻辑就是只做修改,不返回新对象,所以它们的返回值固定是None。你说的“append函数确实起作用了”是对的——此时原列表x已经变成了['a', 'b', 'c', 'a'],只是你把append()返回的None赋值给了y,所以打印y就是None。
那如果想把添加后的列表赋值给y,同时不修改原列表x,可以用这两种方式:
- 先复制原列表,再对副本执行append操作:
x = ['a', 'b', 'c'] y = x.copy() # 或者用切片 y = x[:] 来复制 y.append(x[0]) print(y) # 输出: ['a', 'b', 'c', 'a'] print(x) # 原列表不变,输出: ['a', 'b', 'c']
- 用列表拼接的方式,直接生成新列表:
x = ['a', 'b', 'c'] y = x + [x[0]] print(y) # 输出: ['a', 'b', 'c', 'a']
顺便提一嘴,Python里可变对象的很多修改方法都是这个逻辑,比如list.extend()、list.sort()、dict.update()这些,都是原地修改,返回None。这样设计是为了明确提示开发者:操作是在原对象上进行的,别搞混原对象和返回值啦~
备注:内容来源于stack exchange,提问作者Judicaël Lamyrtille
相关产品推荐
相关产品推荐

