python之深浅拷贝

匿名 (未验证) 提交于 2019-12-02 22:51:08
  • 我的理解:
    • 浅拷贝:列表嵌套列表,子列表会变,父列表不会变
    • 深拷贝:都不变
  • 赋值不是拷贝
l1 = [1,2,3,4,[5,6,7,]] l2 = l1  # 赋值    赋值不是拷贝  多个变量指向同一个内存地址 一个变都变 l1.append(8) print(l1) print(l2)  ''' 输出结果 [1, 2, 3, 4, [5, 6, 7], 8] [1, 2, 3, 4, [5, 6, 7], 8] ''' # 个人见解: # 赋值都指向同一个内存地址,值相同,值发生变化都变化
  • 只拷贝第一层
  • 浅拷贝会创建一个新的列表(容器)
  • 新创建的列表中的元素和原列表的元素用的是同一个内存空间
l1 = [1,2,3,4,[4,5,6]] l2 = l1[:]   # 浅拷贝 l2 = l1.copy() # 浅拷贝  -- 只拷贝第一层 print(id(l1[0])) print(id(l2[0])) ''' 输出结果 4438958224 4438958224 很明显内存地址相同 '''  # 个人见解: # l1中的[4,5,6]会变,外层不会变
  • 不可变的数据类型和原列表指向同一个空间

  • 可变数据会创建一个新的空间

import copy li = [1,2,3,4,5,[6,7,8]] l2 = copy.deepcopy(li) li[-1].append(678) print(li) print(l2)  ''' 输出结果 [1, 2, 3, 4, 5, [6, 7, 8, 678]] [1, 2, 3, 4, 5, [6, 7, 8]] '''   import copy li = [3,4,5,[1,2,3,4],6,7,8,{"k":'v'}] l2 = copy.deepcopy(li) li[-1]['k'] = "a" print(li) print(l2)  [3, 4, 5, [1, 2, 3, 4], 6, 7, 8, {'k': 'a'}] [3, 4, 5, [1, 2, 3, 4], 6, 7, 8, {'k': 'v'}]  ''' 个人见解: 深拷贝都不变 '''
dic = {}   # "v":4 li = []    #[{"v":0},{"v":1},{"v":2},{"v":3},{"v":4}] for i in range(0,5):     dic["v"] = i     li.append(dic) print(li)  ''' 输出结果 [{'v': 4}, {'v': 4}, {'v': 4}, {'v': 4}, {'v': 4}] '''
  • 1.面试
  • 2.不让修改原数据的时候,使用

电脑教学 鼠标写字工具

# 看代码写结果 l1 = [1,2,3,4,[5,6,7,]] l2 = l1  # 赋值    赋值不是拷贝 l1.append(8) print(l1) print(l2) ''' 结果:  '''  l1 = [1,2,3,4,[4,5,6]] l2 = l1[:]   # 浅拷贝 l2 = l1.copy() # 浅拷贝  -- 只拷贝第一层 print(id(l1[0])) print(id(l2[0])) ''' 结果  '''  l1 = [1,2,3,4] l2 = l1.copy() print(l1) print(id(l1)) print(id(l2)) print(id(l1[0])) print(id(l2[0])) ''' 结果  '''  li = [1,2,32,[3,4,5]] l2 = li.copy()  li.append(8) print(l2) print(li)  li[-1].append(8) print(l2) ''' 结果  '''   l1 = [1,2,3,(1,2,3)] l2 = l1.copy() l2[-1] = 6 print(l1) print(l2) ''' 结果  '''  l1 = [1,2,3,4,[5,6,7,]] l2 = l1.copy() l1[-1].append(8) print(l2) ''' 结果  '''  li = [1,2,3,4,] l2 = li  # 赋值   两个变量指向了一个列表内存地址 li.append(9) print(l2) ''' 结果  '''  l1 = [1,2,3,4,5,] l2 = l1.copy() l1.append(8) print(l2) print(l1) ''' 结果  '''  l1 = [1,2,3,[4,5,6]] l2 = l1.copy() l2[-1] = 77 print(l1) print(l2) ''' 结果  '''  import copy li = [1,2,3,4,5,[6,7,8]] l2 = copy.deepcopy(li) print(li) # print(id(li)) print(id(li[-1])) print(l2) # print(id(l2)) print(id(l2[-1])) ''' 结果  '''  import copy li = [1,2,3,4,5,[6,7,8]] l2 = copy.deepcopy(li) li[-1].append(678) print(l2) ''' 结果  '''  import copy li = [3,4,5,[1,2,3,4],6,7,8,{"k":'v'}] l2 = copy.deepcopy(li) li[-1]['k'] = "a" print(li) print(l2) ''' 结果  '''  dic = {}   # "v":4 li = []    #[{"v":0},{"v":1},{"v":2},{"v":3},{"v":4}] for i in range(0,5):     dic["v"] = i     li.append(dic) print(li) ''' 结果  '''
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!