首页 > 解决方案 > Python关于相等运算符和数组定义的理论

问题描述

我偶然发现了一个关于 python 如何工作的理论问题,这让我感到困惑。我试图确切地了解发生了什么,但在谷歌中找不到答案 - 我是初学者,所以我什至不知道进行适当搜索的术语。

在下面的代码中,调用函数时它会更改 myList,而我只想创建一个 list2,它是 list1 (myList) 的副本。

myList = [1,2,3,4,5,(1,2),(3,4)]

def onlyTuples(list1):
    list2 = list1 # here is my question
    for index,e in enumerate(list2):
        if type(list2[index]) is not tuple:
            list2[index] = (list2[index],)
    return(list2)

print(myList)
create_new_list = onlyTuples(myList) # triggered by this call
print(myList)

如果我更改list2 = list1list2 = list(list1)并且调用该函数时不会更改 myList ,那一切都很好,但是为什么呢?

类似这样的事情不会发生同样的事情:

a = 6
b = a
b = 7
print(a)

任何对这个问题的看法将不胜感激。谢谢!

标签: pythonarrayspython-3.x

解决方案


在 python 中,列表是通过引用传递的,所以当你将列表传递给一个函数时,你会传递它在内存中的地址。list2 = list1 不会创建列表的副本,它会将保存在 list1 中的地址保存在 list2 中。所以list2的改变会改变list1,但是类列表中的函数不保存地址,它将一个序列复制到一个列表中


推荐阅读