当前位置:   article > 正文

Python-浅/深拷贝问题:关于for循环中将字典添加到列表中出现字典值全部重复的问题_python dict list追加值全部都相同

python dict list追加值全部都相同

目    录

        一、问题再现

       1、问题阐述

        2、python代码

        3、运行结果 

        二、问题原因

        三、解决方法

        1、直接指向新字典对象(深拷贝)

        2、dict()转换成新字典对象(浅拷贝)

        3、切片[:](浅拷贝)

        4、copy()浅拷贝

        5、copy.copy()浅拷贝

        6、copy.deepcopy()深拷贝

        四、知识点


        一、问题再现

       1、问题阐述

        每次for循环过程中,列表中的所有字典值都和最新的字典赋值相同

        2、python代码

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. # author:bigbear
  4. # datetime:2022/9/8 20:29
  5. # software: PyCharm
  6. t = {"tt": "DUCLAE"}
  7. print(f"---t初始内存地址---{id(t)}")
  8. list0 = [1, "33", 5, {"gg": "sad"}, [1, 2, 3]]
  9. list1 = []
  10. for n in list0:
  11. t["tt"] = n
  12. print(f"\t---t被赋值后内存地址---{id(t)}")
  13. print(f"\t---t被赋值后字典---{t}")
  14. list1.append(t)
  15. for i, n1 in enumerate(list1):
  16. print(f"\t---列表中第-{i + 1}-个内存地址---{id(n1)}")
  17. print(f"\t---列表中第-{i + 1}-个字典---{n1}")
  18. print(f"\t---list1---{list1}\n")

        3、运行结果 

---t初始内存地址---2090766940096
    ---t被赋值后内存地址---2090766940096
    ---t被赋值后字典---{'tt': 1}
    ---列表中第-1-个内存地址---2090766940096
    ---列表中第-1-个字典---{'tt': 1}
    ---list1---[{'tt': 1}]

    ---t被赋值后内存地址---2090766940096
    ---t被赋值后字典---{'tt': '33'}
    ---列表中第-1-个内存地址---2090766940096
    ---列表中第-1-个字典---{'tt': '33'}
    ---列表中第-2-个内存地址---2090766940096
    ---列表中第-2-个字典---{'tt': '33'}
    ---list1---[{'tt': '33'}, {'tt': '33'}]

    ---t被赋值后内存地址---2090766940096
    ---t被赋值后字典---{'tt': 5}
    ---列表中第-1-个内存地址---2090766940096
    ---列表中第-1-个字典---{'tt': 5}
    ---列表中第-2-个内存地址---2090766940096
    ---列表中第-2-个字典---{'tt': 5}
    ---列表中第-3-个内存地址---2090766940096
    ---列表中第-3-个字典---{'tt': 5}
    ---list1---[{'tt': 5}, {'tt': 5}, {&

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/175930
推荐阅读
相关标签
  

闽ICP备14008679号