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一个新的列表。

因为你在打印列表之前调用了这个函数。 如果您打印列表,然后调用该函数,然后再次打印列表,您将得到一个空的列表后跟随附加的版本。 它按照你的代码的顺序。