【发布时间】:2013-02-28 21:36:03
【问题描述】:
我想按值将列表传递给函数。 默认情况下,列表和其他复杂对象通过引用传递给函数。 这是一个愿望:
def add_at_rank(ad, rank):
result_ = copy.copy(ad)
.. do something with result_
return result_
这可以写得更短吗? 换句话说,我不想改变ad。
【问题讨论】:
-
如果
ad是一个列表,你可以做result_ = ad[:] -
它真的不能写得更短,不。您必须明确复制列表。您可以在函数外部或函数内部执行此操作,但您必须这样做。
-
其实引用是按值传递的
-
Python 中不经常使用术语“按值”和“按引用”,因为它们往往会误导来自其他语言的人。正如@gnibbler 所说,Python 中的所有内容都是按值传递的——但有些值是引用。 :)
-
另外,通常的 Pythonic 处理方法是首先避免改变
result_;通过转换旧的list(例如,使用列表理解、map、filter等)创建一个新的list。有时这是不合适的,而且在不知道您的“.. do something with result_”代码看起来或做了什么的情况下,不可能在这里说这是否正确。但它比 Python 新手(尤其是 Java 或 C++ 等语言的新手)更适合。
标签: python pass-by-value