如何在不修改源代码的情况下 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)
鉴于此来源列表:
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)