Python函数内列表修改是否保留到外部?示例存疑
这段Python代码的输出疑问解答
先看问题里的代码:
def a(b): b = b + [5] c = [1, 2, 3, 4] a(c) print(len(c))
核心问题解析
- 原答案a) 4是正确的,但给出的解释完全错误。
- 函数调用
a(c)时,参数b最初确实是c的引用,指向同一个列表[1,2,3,4]。 - 但
b = b + [5]不是原地修改原列表:+运算会合并两个列表,生成一个新的列表对象[1,2,3,4,5],然后把局部变量b重新指向这个新对象。 - 原来的
c始终指向最初的列表[1,2,3,4],没有被改动,所以len(c)输出4。 - 如果要让修改影响到外部的
c,得用原地修改方法,比如b.append(5)或者b.extend([5]),这时候才会直接修改c指向的原列表,输出就会是5。
内容的提问来源于stack exchange,提问作者DCR
相关产品推荐
相关产品推荐

