• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Fantac
博客园    首页    新随笔    联系   管理    订阅  订阅

Python学习日记(六) 浅深copy

浅深copy即完全复制一份和部分复制一份

浅深copy在列表数据量较大时不建议使用,比较消耗内存资源

1.赋值运算

l1 = [1,'s',[1,2,3]]
l2 = l1
print(id(l1),id(l2))    #34103880 34103880
l1[2][1] = 'h'          
print(id(l1),id(l2))    #34103880 34103880

l1和l2指向的是相同的内存地址

2.浅copy

l1 = [1,'s',[4,5,6,'s','h']]
l2 = l1.copy()
print(id(l1),id((l2)))  #5988936 6475464
print(id(l1[0]),id(l2[0]))  #8791394136912 8791394136912
print(id(l1[2][0]),id(l2[2][0]))    #8791410914224 8791410914224

浅copy即开辟一个新的内存空间放一个新的列表,但是里面的元素两边都是公用的

3.深copy

import copy
l1 = [1,'s',False,(2,3,4),{1,2,3},['a','b']]
l2 = copy.deepcopy((l1))
print(id(l1),id(l2))    #42180488 42179272
print(l1,l2)
#不可变数据类型
print(id(l1[0]),id(l2[0]))  #8791394136912 8791394136912
print(id(l1[1]),id(l2[1]))  #37970136 37970136
print(id(l1[2]),id(l2[2]))  #8791410383216 8791410383216
print(id(l1[3]),id(l2[3]))  #39259880 39259880
#可变数据类型
print(id(l1[4]),id(l2[4]))  #42293064 42293512
print(id(l1[5]),id(l2[5]))  #42685064 42685192

深copy是开辟一个新的列表内存空间,当列表中有不可变数据类型的元素时则与原列表共用,当列表有可变数据类型的元素时则会重新创建一个内存地址

面试题:

l1 = [1, 2, 3, 4, ['alex']]
l2 = l1[::]
l1[-1].append(666)  
print(l2)  #[1, 2, 3, 4, ['alex', 666]]
posted @ 2019-07-31 19:59  Fantac  阅读(231)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3