python - 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 = list1
为list2 = list(list1)
并且调用该函数时不会更改 myList ,那一切都很好,但是为什么呢?
类似这样的事情不会发生同样的事情:
a = 6
b = a
b = 7
print(a)
任何对这个问题的看法将不胜感激。谢谢!
解决方案
在 python 中,列表是通过引用传递的,所以当你将列表传递给一个函数时,你会传递它在内存中的地址。list2 = list1 不会创建列表的副本,它会将保存在 list1 中的地址保存在 list2 中。所以list2的改变会改变list1,但是类列表中的函数不保存地址,它将一个序列复制到一个列表中
推荐阅读
- .htaccess - htaccess 多个顶级域和 http 到 https 与 www
- r - 将具有不规则项的 1 级列表转换为数据框
- unity3d - 我可以存储子游戏对象的本地轴并在运行时将其转换为世界轴吗?
- amazon-web-services - 重复的 AWS EC2 自动扩展
- swift - SWIFT:从文本字段格式化为日期不起作用
- reactjs - Why are my GlobalStyles not working after deploying with styled components?
- php - 在codeigniter中打开模式时如何在文本框中填充数据
- mysql - Mysql 用另一个表中的数据更新
- python - Python Numpy 数组(坏)自动舍入
- c# - 将所有单元格从 datagridview 更新到数据库