Python传递列表作为参数
如果我要运行这个代码:
def function(y): y.append('yes') return y example = list() function(example) print(example)
为什么会返回['是'],即使我没有直接改变variables'example',我怎样才能修改代码,使'example'不受函数影响?
一切都是Python中的参考。 如果你想避免这种行为,你将不得不用list()
创build一个新的原件副本。 如果列表中包含更多的引用,则需要使用deepcopy()
def modify(l): l.append('HI') return l def preserve(l): t = list(l) t.append('HI') return t example = list() modify(example) print(example) example = list() preserve(example) print(example)
输出
['HI'] []
修改代码的最简单方法是将[:]添加到函数调用中。
def function(y): y.append('yes') return y example = list() function(example[:]) print(example)
“为什么会返回['yes']
”
因为你修改了列表, example
。
“即使我不是直接改变variables”例子“。
但是,您提供了由variablesexample
命名的对象给函数。 该函数使用对象的append
方法修改对象。
正如在其他地方所讨论的, append
不会产生任何新的东西。 它修改了一个对象。
看看为什么list.append评估为false? , Python追加()与列表中的+运算符,为什么这些给出不同的结果? , Python列表追加返回值 。
以及如何修改代码,使“示例”不受函数影响?
你是什么意思? 如果你不希望被函数更新的example
,不要传递给函数。
如果你想让这个函数创build一个新的列表,那么编写这个函数来创build一个新的列表。
因为你在打印列表之前调用了这个函数。 如果您打印列表,然后调用该函数,然后再次打印列表,您将得到一个空的列表后跟随附加的版本。 它按照你的代码的顺序。