ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
##### 浅拷贝 copy()和深拷贝deepcopy() 先来看一组赋值 复制的例子 \# 赋值得到的复制结果是同一个对象,同一块内存地址 \>>> a=5 \>>> id(a) 1357604080 \>>> b=a \>>> b 5 \>>> id(b) 1357604080 \>>> \>>> ad={"hello":"world"} \#copy不适用与int 和 str类型,是否仅仅适用于字典类型还待验证 \>>> bd=ad \>>> id(ad) 57487792 \>>> id(bd) 57487792 \# 可得出 ,bd,ad引用了同一个内存对象 \>>> cd=ad.copy() \>>> id(cd) \#经过copy后的cd的内存地址发生改变 55731856 \>>> \>>> bd\["hello"\]="tom" \>>> bd {'hello': 'tom'} \>>> ad {'hello': 'tom'} \#由于bd,ad是同一块内存对象,所以修改bd的值,ad会随之改变 \>>> cd {'hello': 'world'} #由于cd是拷贝过来的,所以ad改变 cd不会变 \>>> \>>> x={"name":"tom","ages":\["22","23","25"\]} \>>> y=x.copy() \>>> y {'name': 'tom', 'ages': \['22', '23', '25'\]} \>>> id(x) 56675088 \>>> id(y) 55732000 惊奇的一幕: 删掉y中列表ages中的一个元素,x中的值会变化,虽然他们不是同一个内存对象 \>>> y\["ages"\].remove("25") \>>> y {'name': 'tom', 'ages': \['22', '23'\]} \>>> x {'name': 'tom', 'ages': \['22', '23'\]} \>>> 但是,修改字符串内容,x 和y 却互不影响, \>>> y {'name': 'tom', 'ages': \['22', '23'\]} \>>> x {'name': 'tom', 'ages': \['22', '23'\]} \>>> y\["name"\]="jarry" \>>> y {'name': 'jarry', 'ages': \['22', '23'\]} \>>> x {'name': 'tom', 'ages': \['22', '23'\]} \>>> 结论是: 同一个列表是同一个对象,修改就会发生变化 deepcopy() #使用时要先导入 copy模块 \>>> import copy \>>> z=copy.deepcopy(x) \>>> z {'name': 'tom', 'ages': \['22', '23'\]} \>>> id(x) 56675088 \>>> id(y) 55732000 \>>> id(z) 57488176 \>>> \>>> x\["ages"\].remove("23") \>>> x {'name': 'tom', 'ages': \['22'\]} \>>> y {'name': 'jarry', 'ages': \['22'\]} \>>> z {'name': 'tom', 'ages': \['22', '23'\]} \#z没有随着x的变化而变化,即所谓的深拷贝 \>>> ##### clear \>>> h=copy.deepcopy(x) \>>> h {'name': 'tom', 'ages': \['22'\]} \>>> h.clear() \#将字典中所有元素清空 \>>> h {} \>>> (11) **集合** 如果说,元组tuple是列表和字符串的杂合,那么集合set就是list和dict的杂合 \>>> s=set("hello") \>>> s {'e', 'l', 'o', 'h'} \#集合中的元素不能重复 \>>> \>>> s2={123,"hello",123,"124"} \>>> s3=set(s2) \>>> s3 {123, 'hello', '124'} \>>>