加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱制作网_沈阳站长网 (https://www.024zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

揭秘Python list 深/浅拷贝 原理

发布时间:2022-11-24 12:46:13 所属栏目:语言 来源:
导读:  python list的深/浅拷贝
  python 有一种常用数据类型:list,使用list时经常需要考虑一件事件,那就是:浅拷贝与深拷贝。
  
  至于什么是深浅拷贝,先从一个示例代码来分析一下:
  
  import
  python list的深/浅拷贝
  python 有一种常用数据类型:list,使用list时经常需要考虑一件事件,那就是:浅拷贝与深拷贝。
  
  至于什么是深浅拷贝,先从一个示例代码来分析一下:
  
  import copy
  
  # list 测试使用的源数据
  lists = [[1, 2, 3], 4, 5, 6]
  
  def low_copy():
      # list 浅拷贝
      low_list = copy.copy(lists)
      return list(low_list)
  
  def deep_copy():
      # list 深拷贝
      deep_list = copy.deepcopy(lists)
      return list(deep_list)
  
  if __name__ == "__main__":
      print("源 list:", lists)
      #  分别获取 浅拷贝、深拷贝 list对象
      lists_c = low_copy()
      lists_d = deep_copy()
      print("浅拷贝 list:", lists_c)
      print("深拷贝 list:", lists_c)
  
      print("========================")
      # 对源数据的 第0下数据追加数值7
      print("对源list的第0下数据追加数值7,start")
      lists[0].append(7)
      print("对源list的第0下数据追加数值7,end")
      print("========================")
  
      # 源数据的 第0下数据追加数值7 之后验证,深浅拷贝数据的变化
      print("源 list:", lists)
      print("浅拷贝 list:", lists_c)
      print("深拷贝 list:", lists_d)
  
      # 执行结果
      #  
      # 源 list: [[1, 2, 3], 4, 5, 6]
      # 浅拷贝 list: [[1, 2, 3], 4, 5, 6]
      # 深拷贝 list: [[1, 2, 3], 4, 5, 6]
  
      # ========================
      # 对源list的第0下数据追加数值7,start
      # 对源list的第0下数据追加数值7,end
      # ========================
  
      # 源 list: [[1, 2, 3, 7], 4, 5, 6]
      # 浅拷贝 list: [[1, 2, 3, 7], 4, 5, 6]
      # 深拷贝 list: [[1, 2, 3], 4, 5, 6]
  通过示例代码可以看出:在对list进行浅拷贝、深拷贝之后,对源数据进行修改,则会直接影响浅拷贝的数据,深拷贝的数据则无影响。
  
  这说明了什么,具体又是怎么实现的呢?
  
  pyhton list 的实现
  首先,要说明几点:
  
  python 底层源码使用C语言实现
  在 python 中一切皆对象(整数、字符串,甚至类型、函数等都是对象)
  python的对象,大概分为以下几种:
  
  参考 https://flaggo.github.io/python3-source-code-analysis/objects/object/
  
  解密 python list 深/浅拷贝 原理
  Fundamental 对象: 类型对象
  Numeric 对象: 数值对象
  Sequence 对象
 

(编辑:我爱制作网_沈阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!