ITPub博客

首页 > 应用开发 > Python > Python深浅copy

Python深浅copy

原创 Python 作者:ckxllf 时间:2019-12-02 11:20:05 0 删除 编辑

  深浅copy

  数据类型的分类

  可变(不可哈希)的:list dict set

  不可变(可哈希)的:str bool int tuple

  浅copy:

  会在内存中新开辟一个空间,存放这个copy的列表,但是列表里的内容还是沿用之前对象的内存地址。所以尽管l1,l2的id不同,但是内容id是相同的。

  #浅拷贝

  l1 = [1,2,3,[4,5,6]]

  l2 = l1.copy()

  print(id(l1))

  print(id(l2))

  l1.append(88)

  print(l1)

  print(l2)

  print("-----给列表里的小列表添加值------")

  print(id(l1[3]))

  print(id(l2[3]))

  l2[-1].append("哈哈哈")

  print(l1)

  print(l2)

  1979862092936

  1979865206344

  [1, 2, 3, [4, 5, 6], 88]

  [1, 2, 3, [4, 5, 6]]

  -----给列表里的小列表添加值------

  1979865206472

  1979865206472

  [1, 2, 3, [4, 5, 6, '哈哈哈'], 88]

  [1, 2, 3, [4, 5, 6, '哈哈哈']]

  #切片也是浅copy

  l1 = [1,2,3,[4,5,6]]

  l2 = l1[:]

  l1[-1].append("哈哈")

  print(l1)

  print(l2)

  [1, 2, 3, [4, 5, 6, '哈哈']]

  [1, 2, 3, [4, 5, 6, '哈哈']]

  深copy: 郑州较好的妇科医院 http://www.kd0371.com/

  会在内存中开辟新空间,将原列表以及列表里面的可变数据类型重新创建一份,不可变的数据类型则沿用之前的

  #深copy

  import copy

  l1 = [1,2,3,[4,5,6]]

  l2 = copy.deepcopy(l1)

  print(id(l1))

  print(id(l2))

  print(id(l1[0]),id(l2[0])) # 不可变的数据类型则沿用之前的,所以id相同

  print(id(l1[-1]),id(l2[-1])) # 可变的数据类型在内存中重新创建一份,所以id不同

  l1[-1].append("哈哈哈")

  print(l1)

  print(l2)

  1490814040776

  1490814773896

  140707873329984 140707873329984

  1490813655816 1490814040584

  [1, 2, 3, [4, 5, 6, '哈哈哈']]

  [1, 2, 3, [4, 5, 6]]

  区别:

  浅copy:list dict:嵌套的可变的数据类型是同一个。

  深copy:list dict:嵌套的可变的数据类型不是同一个。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69945560/viewspace-2666449/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-08-16

  • 博文量
    204
  • 访问量
    262646