鱼C论坛

 找回密码
 立即注册
123
返回列表 发新帖
楼主: 小甲鱼

[知识点备忘] 第023讲:列表(V)

[复制链接]
发表于 2023-1-27 20:49:21 | 显示全部楼层
打卡
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-2-1 22:14:15 | 显示全部楼层
6666
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-2-2 10:33:36 | 显示全部楼层
复习打卡完成
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-28 14:49:06 | 显示全部楼层
今日份打卡~~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-2 21:26:21 | 显示全部楼层
copy.deepcopy(),深拷贝
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-3 16:01:14 | 显示全部楼层
jackz008 发表于 2021-8-20 11:39
**** 作者被禁止或删除 内容自动屏蔽 ****

但x里的x[0][0]和y里的y[0][0],这两个不同的引用,也是指向的都是同一个对象,而改变x[0][0],y[0][0]也随着改变了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-13 20:50:22 | 显示全部楼层
**1.变量不是盒子**

在python中,变量不是一个盒子,当赋值运算发生时,python并不是将数据放到变量里边去,而是将变量与数据进行挂钩,这个行为我们称之为引用。

将一个变量赋值给另一个变量其实就是将一个变量的引用传递给另一个变量。

>>> x = [1, 2, 3]
>>> y = x
>>> x[1] = 1
>>> x
[1, 1, 3]
>>> y
[1, 1, 3]
[此时修改x的值,y的值也会随之改变]

**2.浅拷贝**

调用列表的copy方法

>>> x = [1, 2, 3]
>>> y = x.copy()
>>> x[1] = 1
>>> x
[1, 1, 3]
>>> y
[1, 2, 3]
[copy方法拷贝的是整个列表对象,而不仅仅是变量的引用]

利用切片的方法也可以实现拷贝的效果

>>> x = [1, 2, 3]
>>> y = x[:]
>>> x[1] = 1
>>> x
[1, 1, 3]
>>> y
[1, 2, 3]

浅拷贝方法无法处理嵌套列表

>>> x = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> y = x.copy()
>>> x[1][1] = 0
>>> x
[[1, 2, 3], [4, 0, 6], [7, 8, 9]]
>>> y
[[1, 2, 3], [4, 0, 6], [7, 8, 9]]
[浅拷贝只是拷贝了外层的对象,如果包含嵌套对象的话,只是其引用]

**3.copy模板**

有两个函数,copy实现的是浅拷贝,deepcopy实现的是深拷贝。

copy

>>> import copy
>>> x = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> y = copy.copy(x)
>>> x[1][1] = 0
>>> x
[[1, 2, 3], [4, 0, 6], [7, 8, 9]]
>>> y
[[1, 2, 3], [4, 0, 6], [7, 8, 9]],

deepcopy

>>> x = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> y = copy.deepcopy(x)
>>> x[1][1] = 0
>>> x
[[1, 2, 3], [4, 0, 6], [7, 8, 9]]
>>> y
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
[deepcopy将原对象拷贝的同时,也将对象中所有引用的子对象一并进行了拷贝
如果存在多层嵌套的话,深拷贝也会360度无死角地拷贝每一层嵌套里面的数据。]

默认使用的是浅拷贝,因为效率,深拷贝需要更多空间,浅拷贝只要复制地址就行了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-22 22:48:36 | 显示全部楼层
tobio鸹 发表于 2020-8-21 09:46
**** 作者被禁止或删除 内容自动屏蔽 ****

应该是储存机制的原因吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-7 19:41:15 | 显示全部楼层
呜呜呜加油加油坚持坚持慢慢搞懂他
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-4 12:03:12 | 显示全部楼层
1024
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-8-4 16:52:51 | 显示全部楼层
快要没币了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-7 20:04:21 | 显示全部楼层
使用深拷贝   deepcopy   前,,先引用copy模块    import corp
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-16 18:28:48 | 显示全部楼层
  1. >>> import copy
  2. >>> a=[[1,2,3],[4,5,6],[7,8,9]]
  3. >>> b=a
  4. >>> c=a[:]
  5. >>> d=a.copy()
  6. >>> e=copy.copy(a)
  7. >>> f=copy.deepcopy(a)
  8. >>> b
  9. [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  10. >>> c
  11. [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  12. >>> d
  13. [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  14. >>> e
  15. [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  16. >>> f
  17. [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  18. >>> a[1][1] = 999
  19. >>> a
  20. [[1, 2, 3], [4, 999, 6], [7, 8, 9]]
  21. >>> b
  22. [[1, 2, 3], [4, 999, 6], [7, 8, 9]]
  23. >>> c
  24. [[1, 2, 3], [4, 999, 6], [7, 8, 9]]
  25. >>> d
  26. [[1, 2, 3], [4, 999, 6], [7, 8, 9]]
  27. >>> e
  28. [[1, 2, 3], [4, 999, 6], [7, 8, 9]]
  29. >>> f
  30. [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-18 17:38:32 | 显示全部楼层
学完打卡
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-12-25 08:49:30 | 显示全部楼层
将一个变量赋值给另一个变量其实就是将一个变量的引用传递给另一个变量。

>>> x = [1, 2, 3]
>>> y = x
>>> x[1] = 1
>>> x
[1, 1, 3]
>>> y
[1, 1, 3]
[此时修改x的值,y的值也会随之改变]
请问:将一个变量赋值给另一个变量其实就是将一个变量的引用传递给另一个变量,怎么白话文理解,x变y也要变
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-12-31 08:54:09 | 显示全部楼层
Python重修
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-4-22 21:44:05 | 显示全部楼层
tobio鸹 发表于 2020-8-21 09:46
**** 作者被禁止或删除 内容自动屏蔽 ****

先纠正下语法,=是赋值,==才是比较值是否相等
用==得到true,是因为==比较的是左右两边的值
用 is 得到false,是因为x和y变量指向的地址不同(如果想深入了解,可以去看c语言的指针,再做一做相关的题)
可以这样看地址:
a=[[1,2],[3,4]]
b=a[:]
hex(id(a))
'0x10784ed80'
hex(id(b))
'0x107853340'
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-5-29 10:45:07 | 显示全部楼层
tobio鸹 发表于 2020-8-21 09:46
**** 作者被禁止或删除 内容自动屏蔽 ****

x,y都是列表是变量,id不同,is判断是False,x[0] == y[0] 为True是因为内容一样(值一样),例子中为两层嵌套,切片为浅拷贝,所以y[0] 内容是对x[0]的引用,这样,改变x[0][0]的时候y[0][0]会一起变,但是x的改变外层内容,y不会变,可以在idle中尝试一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-8 01:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表