列出更改,即使它没有被更改

时间:2015-04-10 19:00:33

标签: python

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

2 个答案:

答案 0 :(得分:0)

简单地说,列表可以通过引用传递。在列出的代码之外的代码中的某些地方,这些列表通过一个引用另一个或类似性质的内容链接在一起。

答案 1 :(得分:0)

returnarray=somelist

Python通过引用传递所有内容。此行使两个名称returnarraysomelist引用相同列表。您对returnarray所做的一切都将反映在somelist

改为复制:

returnarray=somelist[:]