首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Python语法学习记录(9):list浅拷贝问题解析

  • 25-03-03 18:02
  • 3245
  • 12685
blog.csdn.net

文章目录

  • 一、列表浅拷贝演示
    • 列表的浅拷贝的产生
    • 列表的浅拷贝的检查
    • 什么样的操作会继续共享浅拷贝
    • 什么样的操作会破坏共享浅拷贝
  • 二、列表乘法所带来的浅拷贝
  • 三、二维乘法操作带来横向浅拷贝
  • 四、二维乘法操作所带来纵向浅拷贝

一、列表浅拷贝演示

列表的浅拷贝的产生

列表的浅拷贝的检查

什么样的操作会继续共享浅拷贝

什么样的操作会破坏共享浅拷贝

#============================================================================
#针对列表进行append,remove等操作不会破坏浅拷贝两个列表一同更新
#针对列表中间元素进行复制,不会破坏浅拷贝 两个列表一同更新
#针对中间一个列表进行复制  会重新设置id   破坏浅拷贝   之后两个列表无关 
print("===="*5,"等于所带来浅拷贝")
list1 = [1,2,3]
list2 = list1
print("after  =    ======")
print("打印list1:",list1)
print("打印list2:",list2)
print("List1地址:",id(list1))
print("List2地址:",id(list2))
list1.remove(3)  
print("after remove=====")
print("打印list1:",list1)
print("打印list2:",list2)
print("List1地址:",id(list1))
print("List2地址:",id(list2))
list1.append(3)
print("after append=====")
print("打印list1:",list1)
print("打印list2:",list2)
print("List1地址:",id(list1))
print("List2地址:",id(list2))
list1[1] = 0
print("after ele init ==")
print("打印list1:",list1)
print("打印list2:",list2)
print("List1地址:",id(list1))
print("List2地址:",id(list2))
list1[1] = [3,4]
print("after ele init ==")
print("打印list1:",list1)
print("打印list2:",list2)
print("List1地址:",id(list1))
print("List2地址:",id(list2))
list1[0] = [1,2]
print("after ele init ==")
print("打印list1:",list1)
print("打印list2:",list2)
print("List1地址:",id(list1))
print("List2地址:",id(list2))
list1 = [1,2,3,4]#重新赋值时候浅拷贝无效  id change
print("after list init ==")
print("打印list1:",list1)
print("打印list2:",list2)
print("List1地址:",id(list1))
print("List2地址:",id(list2))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

在这里插入图片描述

二、列表乘法所带来的浅拷贝

#针对列表的乘法后赋值不会升维度
#针对列表的乘法后在外面加上[]就会升维度
#第二种乘法会有浅拷贝  相同列表经过乘法作为被赋值列表的重复元素
print("===="*5,"一维乘法操作所带来浅拷贝")
list1 = [1,2,3]
print("打印list1:",list1)
#一个列表的所有元素所能索引到的id是不一样的
print("List1[0]地址:",id(list1[0]))
print("List1[1]地址:",id(list1[1]))
print("List1[2]地址:",id(list1[2]))
list1 = [0]*3
print("打印list1:",list1)
#乘法之后一个列表的所有数组所能索引到的id是一样的
print("List1[0]地址:",id(list1[0]))
print("List1[1]地址:",id(list1[1]))
print("List1[2]地址:",id(list1[2]))
list1[0] = 1
#此处如上元素之间地址相同但是对某一个元素重新赋值就会破坏浅拷贝
#因为元素已经是最小单位,一经赋值就会破坏浅拷贝
print("List1[0]地址:",id(list1[0]))
print("List1[1]地址:",id(list1[1]))
print("List1[2]地址:",id(list1[2]))
list1 = [1,2,3]*3
print("打印list1:",list1)
#乘法之后一个列表的所有数组所能索引到的id是一样的
print("List1[0]地址:",id(list1[0]))
print("List1[1]地址:",id(list1[1]))
print("List1[2]地址:",id(list1[2]))
list1[0] = 100
#此处如上元素之间地址相同但是对某一个元素重新赋值就会破坏浅拷贝
#因为元素已经是最小单位,一经赋值就会破坏浅拷贝
print("打印list1:",list1)
print("List1[0]地址:",id(list1[0]))
print("List1[1]地址:",id(list1[1]))
print("List1[2]地址:",id(list1[2]))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

在这里插入图片描述

三、二维乘法操作带来横向浅拷贝

print("===="*5,"二维乘法操作所带来横向浅拷贝")
#针对列表进行append,remove等操作不会破坏浅拷贝两个列表一同更新
#针对列表中间元素进行复制,不会破坏浅拷贝 两个列表一同更新
#针对浅拷贝中间一个列表进行复制  会重新设置id   破坏浅拷贝   之后两个列表无关 
list1 = [[0]]*3
print("打印list1:",list1)
print("List1[0]地址:",id(list1[0]))
print("List1[1]地址:",id(list1[1]))
print("List1[2]地址:",id(list1[2]))
list1[0].append(1)
print("打印list1:",list1)
print("List1[0]地址:",id(list1[0]))
print("List1[1]地址:",id(list1[1]))
print("List1[2]地址:",id(list1[2]))
list1[0][0] = 100
#针对列表中间元素进行复制,不会破坏浅拷贝 两个列表一同更新
print("打印list1:",list1)
print("List1[0]地址:",id(list1[0]))
print("List1[1]地址:",id(list1[1]))
print("List1[2]地址:",id(list1[2]))
list1[0] = 100
#针对浅拷贝中间一个列表进行复制  会重新设置id   破坏浅拷贝   之后两个列表无关 
print("打印list1:",list1)
print("List1[0]地址:",id(list1[0]))
print("List1[1]地址:",id(list1[1]))
print("List1[2]地址:",id(list1[2]))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

在这里插入图片描述

四、二维乘法操作所带来纵向浅拷贝

print("===="*5,"二维乘法操作所带来纵向浅拷贝")
list1 = [[0]*2]*3
#横向间为元素的赋值  可以看作没有浅拷贝  纵向间可以看作有浅拷贝
print("打印list1:",list1)
print("List1[0]地址:",id(list1[0]))
print("List1[1]地址:",id(list1[1]))
print("List1[2]地址:",id(list1[2]))
list1[0].append(3) 
print("打印list1:",list1)
list1[1][1] = [1,2] #对浅拷贝内的元素进行重新复制可行
print("打印list1:",list1)
print("List1[0]地址:",id(list1[0][1]))
print("List1[1]地址:",id(list1[1][1]))
print("List1[2]地址:",id(list1[2][1]))
list1[1][1][0] = 0 #对浅拷贝内的元素进行重新复制可行
print("打印list1:",list1)
print("List1[0]地址:",id(list1[0][1]))
print("List1[1]地址:",id(list1[1][1]))
print("List1[2]地址:",id(list1[2][1]))
list1[0][1] = 100 #对浅拷贝内的元素进行重新复制可行
print("打印list1:",list1)
print("List1[0]地址:",id(list1[0]))
print("List1[1]地址:",id(list1[1]))
print("List1[2]地址:",id(list1[2]))
list1[0] = 100 #对浅拷贝列表重新赋值时候浅拷贝无效
#对整个列表进行append等list函数以外的赋值操作则地址会改变 浅拷贝就不存在了
print("打印list1:",list1)
print("List1[0]地址:",id(list1[0]))
print("List1[1]地址:",id(list1[1]))
print("List1[2]地址:",id(list1[2]))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

在这里插入图片描述

文章知识点与官方知识档案匹配,可进一步学习相关知识
Python入门技能树基础语法内置类416632 人正在系统学习中
注:本文转载自blog.csdn.net的呆呆象呆呆的文章"https://blog.csdn.net/qq_41554005/article/details/94382585"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top