python - Why doesn't the function change it's argument?
问题描述
def func(l):
l = l + l
return ()
lst = [22, 33, 13]
func(lst)
print(lst)
The output is [22, 33, 13]
. Why is it not [22, 33, 13, 22, 33, 13]
?
解决方案
在函数内部,您将引用l
指向一个新的列表对象l + l
。外部引用lst
仍然指向原始列表对象。
如果函数修改了列表对象本身,例如通过附加到它,您将在函数结束后看到效果。
def func(l):
l.append(42)
print(l)
return () # Not really needed.
lst = [22, 33, 13]
func(lst)
print(lst)
如果您想获得所需的结果,请尝试使用 listextend
方法。
def func(l):
l.extend(l)
lst = [22, 33, 13]
func(lst)
print(lst) # prints [22, 33, 13, 22, 33, 13]
推荐阅读
- .htaccess - 如何解决 .htaccess 文件中的重定向 301?
- batch-file - 如何在批处理循环中重命名文件
- kotlin - 如何在 Kotlin 常用代码中创建动态代理?
- ios - Socket.IO - 'WebSocket' 类型的值没有成员 'onHttpResponseHeaders'
- mongodb - MongoError:无法获取锁
- c - gcc 链接器未在 debian 7.4 wheezy 32 位、gnome 3.4.2 下链接程序
- facebook-graph-api - 用户配置文件详细信息 API 中未获取用户配置文件链接,以前一些配置文件链接已损坏,但现在没有响应
- google-app-engine - 如何在基于 GAE 的应用程序中更新 webapp2_extras 会话
- dart - Flutter:删除所有已保存的共享首选项
- hyperledger-fabric - rpc 错误:code = InvalidArgument desc = port '7050' 已被 service orderer_org1' (kc0if2dce5t7lzrl0crg4ttyz) 用作入口端口