Python基础
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python基础,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2519字,纯文字阅读大概需要4分钟。
内容图文
1.数据类型:
# 可变: list ,dict ,set(集合) # 不可变: int bool str tuple
# 有序: list,tuple,str,int,bool # 无序: dict(python3.6以后可以是有序的了),set
# 取值方式: # 索引: str list tuple # 直接: set ,int ,bool # 键: dict
注意:‘is‘和‘==‘
‘==‘只比较值是否一样
‘is‘不仅比较值一样还要比较内存地址是否一样
2.深浅拷贝:
import copy lst1=[1,2,3] lst2=copy.copy(lst1)#浅拷贝 lst3=copy.deepcopy(lst1)#深拷贝 lst4=lst1 #赋值
定义:
浅拷贝 :
浅拷贝只拷贝第一层(如果有列表嵌套,他会复制那一个索引位置的列表的内存地址,而那个列表内的数据不会复制,说白了就是共用内部的list,最外层的list是自己新建的)
深拷贝:
可变类型拷贝,不可变类型共用(列表嵌套时,内层的列表地址不会复制,因为list是可变的,他是自己创个内部的list,然后共用list内的不可变元素的地址)
其实深拷贝不可变元素时也应该重新创建内存,来访对应的不可变元素,因为小数据池的关系所以就没新开辟地址.
注:
如果发生了拷贝,内存地址一定发生变化,说白了拷贝就是自己新建地址,放复制过来的内容.
如下图:深浅拷贝如果只拷贝一个单一的列表(列表内不包含字典列表等可变元素)的情况下,深浅拷贝效果都一样:
再看代码:
# 如果只是单一列表,深浅拷贝都一样 import copy lst1=[1,2,3] lst2=copy.copy(lst1)#浅拷贝 lst3=copy.deepcopy(lst1)#深拷贝print(id(lst1),id(lst2),id(lst3))#列表地址新建,全都不一样 # 44954968 44957408 44990712print(id(lst1[1]) , id(lst2[1]) , id(lst3[1]))#内部不可变元素全都共用 # 496100128 496100128 496100128
重点(这里要着重理解):
列表内部加了列表后(深浅拷贝就不一样了):
看代码:
# 如果列表套列表,深浅拷贝大不一样了 import copy lst1=[1,2,3,[4,5,6,[7,8,9]]] lst2=copy.copy(lst1)#浅拷贝 lst3=copy.deepcopy(lst1)#深拷贝print(id(lst1),id(lst2),id(lst3))#地址新建,全都不一样 # 44954968 44957408 44990712print(id(lst1[1]) , id(lst2[1]) , id(lst3[1]))#内部不可变元素全都共用 # 496100128 496100128 496100128# 看内部列表print(id(lst1[3]) , id(lst2[3]) , id(lst3[3]))#深拷贝是自己建的所以不一样,浅拷贝是共用的 # 52295000 52295000 52330984# 看内部列表的内部元素print(id(lst1[3][0]) , id(lst2[3][0]) , id(lst3[3][0]))#4是不可变元素,共用 # 496296768 496296768 496296768# 看内部列表再套的列表print(id(lst1[3][3]) , id(lst2[3][3]) , id(lst3[3][3]))#还是只有深拷贝自己建(因为列表不管在哪都是可变元素),浅拷贝共用 # 44758360 44758360 44796584print(id(lst1[3][3][1]) , id(lst2[3][3][1]) , id(lst3[3][3][1]))#里面的不可变元素8还是共用的 # 493675392 493675392 493675392
特殊情况(元组套列表):
如果单一元组深浅拷贝就都一样:
import copy v1=(1,2,3) v2=copy.copy(v1)#浅拷贝 v3=copy.deepcopy(v1)#深拷贝print(id(v1[1]),id(v2[1]),id(v3[1]))#内部不可变元素都是一样的 # 501474080 501474080 501474080print(id(v1),id(v2),id(v3))#浅拷贝只是单一元组,深浅拷贝都一样,因为里面都是不可变元素,元组也不可变 # 47061912 47061912 47061912 copy.copy(v)=copy.deepcopy(v) #单一元组时深浅拷贝都一样
如果元组里有列表:
import copy v1=(1,2,3,[4,5,6]) v2=copy.copy(v1)#浅拷贝 v3=copy.deepcopy(v1)#深拷贝print(id(v1),id(v2),id(v3))#浅拷贝不变,深拷贝会变,因为里面多了不可变元素,深拷贝要变的 # 18215728 18215728 48191024print(id(v1[1]),id(v2[1]),id(v3[1]))#内部不可变元素都是一样的 # 501474080 501474080 501474080print(id(v1[3]),id(v2[3]),id(v3[3]))#内部列表已经不同地址了所以元组也变了 # 51377496 51377496 51413360 元组套列表(元组里面都是不可变元素,都不变,怎么拷贝都一样,如果元组里面有可变元素,例如列表,此时深拷贝会变,浅拷贝没事,和原来一样) 浅拷贝不变 深拷贝变了,因为深拷贝中不可变元素不会共用
原文:https://www.cnblogs.com/shengjunqiye/p/12808211.html
内容总结
以上是互联网集市为您收集整理的Python基础全部内容,希望文章能够帮你解决Python基础所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。