如何在不修改源代码的情况下 append/prepend 列出函数?

How do I append/prepend list in function without modifying source?

鉴于此来源列表:

source_list = [2, 3, 4]

和这个函数:

def function(list_in):
    list_in.append(5)
    list_in.insert(0, 1)
    return list_in

不出所料,我得到:

>>> function(source_list)
[1, 2, 3, 4, 5]

但是如果我在函数外调用变量 source_list 我仍然得到:

>>> source_list
[1, 2, 3, 4, 5]

是否有其他方法可以修改(特别是 appending/prepending 到)函数内的列表,从而不更改原始列表?

如果您有权访问该函数,则可以复制传递的列表:

像这样:

def function(list_in_):     # notice the underscore suffix
    list_in = list_in_[:]   # copy the arg into a new list
    list_in.append(5)
    list_in.insert(0, 1)
    return list_in          # return the new list

否则,您可以使用 source_list 的副本调用该函数,并决定是否需要一个新列表,或者您是否更喜欢 source_list 突变,如@tdelaney[= 所示13=]

如果你是函数的调用者,可以先复制

new_list = function(source_list[:])

这样做的好处是调用者可以决定是否要修改其当前列表。

可以使用copy()方法上榜:

new_list = function(source_list.copy())

在您的函数中添加一行:

   def function(list_n):
    #Do a copy of your list
    list_in = list_n.copy()
    list_in.append(5)
    list_in.insert(0, 1)
    return list_in

试试这个。由于在代码中 运行 函数时修改了源列表,因此您无法保留源列表。

source_list = [2, 3, 4]
list_in=source_list.copy()
def function(list_in):
    list_in.append(5)
    list_in.insert(0, 1)
    return list_in
print(function(list_in))
print(source_list)