Wynn_0303
发表于 2023-1-27 20:49:21
打卡
chenbocauc
发表于 2023-2-1 22:14:15
6666
Luce
发表于 2023-2-2 10:33:36
复习打卡完成
littlewhale
发表于 2023-2-28 14:49:06
今日份打卡~~~
YaphetS-Python
发表于 2023-3-2 21:26:21
copy.deepcopy(),深拷贝
清风扶月
发表于 2023-3-3 16:01:14
jackz008 发表于 2021-8-20 11:39
**** 作者被禁止或删除 内容自动屏蔽 ****
但x里的x和y里的y,这两个不同的引用,也是指向的都是同一个对象,而改变x,y也随着改变了。
1137687803
发表于 2023-3-13 20:50:22
**1.变量不是盒子**
在python中,变量不是一个盒子,当赋值运算发生时,python并不是将数据放到变量里边去,而是将变量与数据进行挂钩,这个行为我们称之为引用。
将一个变量赋值给另一个变量其实就是将一个变量的引用传递给另一个变量。
>>> x =
>>> y = x
>>> x = 1
>>> x
>>> y
[此时修改x的值,y的值也会随之改变]
**2.浅拷贝**
调用列表的copy方法
>>> x =
>>> y = x.copy()
>>> x = 1
>>> x
>>> y
利用切片的方法也可以实现拷贝的效果
>>> x =
>>> y = x[:]
>>> x = 1
>>> x
>>> y
浅拷贝方法无法处理嵌套列表
>>> x = [, , ]
>>> y = x.copy()
>>> x = 0
>>> x
[, , ]
>>> y
[, , ]
[浅拷贝只是拷贝了外层的对象,如果包含嵌套对象的话,只是其引用]
**3.copy模板**
有两个函数,copy实现的是浅拷贝,deepcopy实现的是深拷贝。
copy
>>> import copy
>>> x = [, , ]
>>> y = copy.copy(x)
>>> x = 0
>>> x
[, , ]
>>> y
[, , ],
deepcopy
>>> x = [, , ]
>>> y = copy.deepcopy(x)
>>> x = 0
>>> x
[, , ]
>>> y
[, , ]
[deepcopy将原对象拷贝的同时,也将对象中所有引用的子对象一并进行了拷贝
如果存在多层嵌套的话,深拷贝也会360度无死角地拷贝每一层嵌套里面的数据。]
默认使用的是浅拷贝,因为效率,深拷贝需要更多空间,浅拷贝只要复制地址就行了
为了60块
发表于 2023-3-22 22:48:36
tobio鸹 发表于 2020-8-21 09:46
**** 作者被禁止或删除 内容自动屏蔽 ****
应该是储存机制的原因吧
来自成都的momo
发表于 2023-4-7 19:41:15
呜呜呜加油加油坚持坚持慢慢搞懂他
justsingmysong
发表于 2023-6-4 12:03:12
1024
万恶的亚撒西
发表于 2023-8-4 16:52:51
快要没币了
FiatLux_
发表于 2023-9-7 20:04:21
使用深拷贝 deepcopy 前,,先引用copy模块 import corp
137430724
发表于 2023-10-16 18:28:48
>>> import copy
>>> a=[,,]
>>> b=a
>>> c=a[:]
>>> d=a.copy()
>>> e=copy.copy(a)
>>> f=copy.deepcopy(a)
>>> b
[, , ]
>>> c
[, , ]
>>> d
[, , ]
>>> e
[, , ]
>>> f
[, , ]
>>> a = 999
>>> a
[, , ]
>>> b
[, , ]
>>> c
[, , ]
>>> d
[, , ]
>>> e
[, , ]
>>> f
[, , ]
JTYBLCC
发表于 2024-7-18 17:38:32
学完打卡
紫藤竹轩
发表于 2024-12-25 08:49:30
将一个变量赋值给另一个变量其实就是将一个变量的引用传递给另一个变量。
>>> x =
>>> y = x
>>> x = 1
>>> x
>>> y
[此时修改x的值,y的值也会随之改变]
请问:将一个变量赋值给另一个变量其实就是将一个变量的引用传递给另一个变量,怎么白话文理解,x变y也要变
戰戰
发表于 2024-12-31 08:54:09
Python重修
南街挽歌
发表于 2025-4-22 21:44:05
tobio鸹 发表于 2020-8-21 09:46
**** 作者被禁止或删除 内容自动屏蔽 ****
先纠正下语法,=是赋值,==才是比较值是否相等
用==得到true,是因为==比较的是左右两边的值
用 is 得到false,是因为x和y变量指向的地址不同(如果想深入了解,可以去看c语言的指针,再做一做相关的题)
可以这样看地址:
a=[,]
b=a[:]
hex(id(a))
'0x10784ed80'
hex(id(b))
'0x107853340'
万恶的亚撒西
发表于 2025-5-29 10:45:07
tobio鸹 发表于 2020-8-21 09:46
**** 作者被禁止或删除 内容自动屏蔽 ****
x,y都是列表是变量,id不同,is判断是False,x == y 为True是因为内容一样(值一样),例子中为两层嵌套,切片为浅拷贝,所以y 内容是对x的引用,这样,改变x的时候y会一起变,但是x的改变外层内容,y不会变,可以在idle中尝试一下