Python 中,列表修改为何会影响源值?

ID:20878 / 打印

python 中,列表修改为何会影响源值?

列表修改与源值关联

在 python 中,列表是可变数据结构,这意味着对列表的修改会直接反映在原始列表中,而不会创建新的副本。这让人感到困惑,尤其是当列表包含字典等可变对象时。

考虑以下代码段:

shadow = [{     "name": "admin",     "password": "admin",     "age": "18", }, {     "name": "xys",     "password": "123132",     "age": "18", }]  arr1 = list(filter(lambda x: x["name"] == "xys", shadow)) arr1[0].update({"name": "yourself"})  print(arr1)  # 输出 [{'name': 'yourself', 'password': '123132', 'age': '18'}] print(shadow[1])  # 输出 {'name': 'yourself', 'password': '123132', 'age': '18'}

为什么在 arr1 上修改值会影响 shadow 中的源值?

立即学习“Python免费学习笔记(深入)”;

引用赋值

当将 shadow 中符合条件的字典引用赋值给 arr1 时,arr1 不仅储存了字典的内容,还储存了指向原始列表中字典的引用。因此,当通过 arr1 访问字典时,实际上是在修改原始列表中的字典。

避免意外修改

如果你希望对列表中的值进行修改而不影响原始列表,有几种方法可以考虑:

  • 使用副本:使用 copy() 方法或 import copy 并使用 copy.deepcopy() 创建一个列表的副本。所做的任何修改都只影响副本,而不会影响原始列表。
  • 使用切片:通过使用切片创建一个新的列表,而不是引用赋值,你可以确保对新列表的修改不会影响原始列表。例如:
arr1 = shadow[1:]  # 创建新列表  arr1[0].update({"name": "yourself"})  print(arr1)  # 输出 [{'name': 'yourself', 'password': '123132', 'age': '18'}] print(shadow[1])  # 输出 {'name': 'xys', 'password': '123132', 'age': '18'}
上一篇: 机器视觉学习入门:如何选择合适的框架和书籍?
下一篇: 如何按照 CSV 文件行内指定数据排序并写入?

作者:admin @ 24资源网   2025-01-14

本站所有软件、源码、文章均有网友提供,如有侵权联系308410122@qq.com

与本文相关文章

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。