Class A:
def somefunction(self,somelist):
print(str(somelist)) #Prints ["1","#2","3","#4"]
b = B()
filterlist = b.remove_tagfromarray(somelist)
print(str(somelist)) #Prints ["1","3"] #<<<<<WHY IS THIS?!!!!!!
print(str(y)) #Prints ["1","3"]
remove_tagfromarray(x)接受一个数组并返回一个没有hashtags的数组。但是,在执行上面的代码之后,它还会改变ORIGINAL数组,该数组从未在另一个类中调用的函数中操作或引用。我非常困惑。即使引入一个新变量似乎也不起作用。
Class A:
def somefunction(self,somelist):
savedarray = somelist
print(str(somelist)) #Prints ["1","#2","3","#4"]
b = B()
filterlist = b.remove_tagfromarray(somelist)
print(str(savedarray)) #Prints ["1","3"] WHY!?!?!?!?
print(str(filterlist)) #Prints ["1","3"]
就函数而言,它将列表作为参数,将其复制到另一个&#34; returnarray&#34;变量,在最终返回之前被弄乱。请注意,它可以正常工作,因为我得到了正确的结果,但不知何故,该功能改变了原始变量。我在这里错过了什么吗?显然,somelist或savedarray(在第二个例子中)应该返回未改变的数组。
def remove_tagfromarray(self,somelist,bannedchar="#"):
popque = []
popcount = 0
n=0
returnarray=somelist
for word in returnarray:
if (bannedchar in word)):
popque.append(n)
n+=1
for target in popque:
returnarray.pop(target-popcount)
popcount = popcount + 1
return returnarray
答案 0 :(得分:0)
简单地说,列表可以通过引用传递。在列出的代码之外的代码中的某些地方,这些列表通过一个引用另一个或类似性质的内容链接在一起。
答案 1 :(得分:0)
returnarray=somelist
Python通过引用传递所有内容。此行使两个名称returnarray
和somelist
引用相同列表。您对returnarray
所做的一切都将反映在somelist
。
改为复制:
returnarray=somelist[:]