鱼C论坛

 找回密码
 立即注册
查看: 13400|回复: 54

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

[复制链接]
发表于 2020-7-22 17:23:35 | 显示全部楼层 |阅读模式
购买主题 已有 25 人购买  本主题需向作者支付 5 鱼币 才能浏览
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-22 17:40:08 | 显示全部楼层
沙发
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-21 09:46:34 | 显示全部楼层
请问下x=[[1,2],[3,4]]     x = y[:]后,
x is y是False
为什么x[0] = y[0]是True呢?
明明改变x[0]y并不会改变啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 4 反对 0

使用道具 举报

发表于 2021-4-7 10:21:18 | 显示全部楼层
**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度无死角地拷贝每一层嵌套里面的数据。]

默认使用的是浅拷贝,因为效率,深拷贝需要更多空间,浅拷贝只要复制地址就行了

点评

我很赞同!: 4.5
我很赞同!: 4
【默认使用的是浅拷贝,因为效率,深拷贝需要更多空间,浅拷贝只要复制地址就行了】赞同!  发表于 2024-2-1 11:50
我很赞同!: 5
感谢讲解  发表于 2023-4-7 14:08

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
巡域 + 5 + 5 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 9 反对 0

使用道具 举报

发表于 2021-5-17 15:24:07 | 显示全部楼层
zdasd 发表于 2021-4-7 10:21
**1.变量不是盒子**

在python中,变量不是一个盒子,当赋值运算发生时,python并不是将数据放到变量里边 ...

码主 复习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-24 15:33:49 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-23 17:38:13 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-11 10:16:59 | 显示全部楼层
打卡023
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-11 11:51:41 | 显示全部楼层
已复习,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-20 11:39:50 | 显示全部楼层
tobio鸹 发表于 2020-8-21 09:46
请问下x=[[1,2],[3,4]]     x = y[:]后,
x is y是False
为什么x[0] = y[0]是True呢 ...

x和y是两个不同的引用指向两个不同的对象,所以是false ,但x里的x[0] 和 y里的y[0],这两个不同的引用,指向的都是同一个对象,所以为true,当改变x[?]时,引用就指向别的对象了,y[?]当然不会变。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-9-11 12:07:17 | 显示全部楼层
从嵌套列表开始就有点晕晕乎乎了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-26 12:06:00 | 显示全部楼层
jackz008 发表于 2021-8-20 11:39
x和y是两个不同的引用指向两个不同的对象,所以是false ,但x里的x[0] 和 y里的y[0],这两个不同的引用, ...

如果对引用和实际的对象不理解的话,想要理解这一章,确实会有困难。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-1 10:46:49 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-6 16:19:51 | 显示全部楼层
学到了很多,谢谢小甲鱼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-24 11:03:31 | 显示全部楼层
打卡~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-1 16:30:10 | 显示全部楼层
zdasd 发表于 2021-4-7 10:21
**1.变量不是盒子**

在python中,变量不是一个盒子,当赋值运算发生时,python并不是将数据放到变量里边 ...

niubi
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-1 21:45:38 | 显示全部楼层
matrix = [[10, 36, 52],
          [33, 24, 88],
          [66, 76, 99]]

minimum_rows = []
for a in range(3):
    for b in range(3):
        if b == 0:
            min_value = [matrix[a][0],a,b]
        else:
            if matrix[a][b] < min_value[0]:
                min_value[0] = matrix[a][b]
                min_value[1] = a
                min_value[2] = b
    minimum_rows.append(min_value)

maximum_columns = []
for a in range(3):
    max_value = [matrix[0][a],0,a]
    maximum_columns.append(max_value)

for a in range(1,3):
    for b in range(3):
        if matrix[a][b] > maximum_columns[b][0]:
            maximum_columns[b][0] = matrix[a][b]
            maximum_columns[b][1] = a
            maximum_columns[b][2] = b

for a in range(3):
    for b in range(3):
        if minimum_rows[a] == maximum_columns[b]:
            print("幸运数字是:",minimum_rows[a][0])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-4-10 17:50:59 | 显示全部楼层
打卡
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-14 15:30:01 | 显示全部楼层
做到课后练习最后一个题,我感觉自己脑子都没有了。
看了答案,我去,这居然都想的得到。

还得努力啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-17 22:09:26 | 显示全部楼层
打卡
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-11 17:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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