python2的默认数字类型_Python笔记2(数据类型)

一、数字int

数字主要是用于计算、运算。使用方法并不是很多,就记住一种就可以:

1 '''

2 bit_length()将十进制转化为二进制站的位数3 二进制 十进制4 0000 0001 15 0000 0010 26 0000 0011 37 0000 0100 48 '''

9 i=3

10 j=4

11 print(i.bit_length())#>>>2

12 print(j.bit_length())#>>>3

二、布尔值bool

布尔值就两种:True,False。就是反应条件的正确与否。

1 '''

2 数字与字符串转化3 int ---> str : str(int)4 str ---> int : int(str) str必须全部是数字组成5 布尔型与数字、字符串转化6 int ---> bool:0 ---> False 非0 ---> True7 bool---> int :int(True)---> 1 int(False)---> 08 str ---> bool:空字符串 ---> False 非空字符串---> True9 '''

10 print(int(True))#>>>1

11 print(int(False))#>>>0

12 print(bool(''))#>>>False

13 print(bool('a'))#>>>False

三、字符串

1、字符串的索引

索引即下标,就是字符串组成的元素从第一个开始,初始索引为0以此类推。

1 s='Hello World!'

2 s1=s[0]#第一个元素

3 s2=s[-1]#最后一个元素

4 s3=s[-2]#倒数第二个元素

5 print(s1)#>>>H

6 print(s2)#>>>!

7 print(s3)#>>>d

2、字符串的切片

切片就是通过索引(索引:索引:步长)截取字符串的一段,形成新的字符串(原则就是顾首不顾尾)。

s1=s[起始索引:结束索引:步长]

1 s='Hello World!'

2 s1=s[0:3]#从字符串的第1个字符到第3个字符进行切片

3 s2=s[:3]#0可以省略

4 s3=s[3:9]#从字符串的第4个字符到第9个字符进行切片

5 s4=s[:5:2]#从字符串的第1个字符到第5个字符进行切片,加步长2

6 s5=s[:]#把字符串全部取出来

7 s6=s[-1:-4:-1]#反向取字符串,加反向步长

8 print(s1)#>>>Hel

9 print(s2)#>>>Hel

10 print(s3)#>>>lo Wor

11 print(s4)#>>>Hlo

12 print(s5)#>>>Hello World!

13 print(s6)#>>>!dl

3、字符串常用的方法

1)* captalize()  首字母大写

1 s='Hello World!'

2 s1=s.capitalize()3 print(s1)#>>>Hello world!

2)***upper()  字母全部大写   lower() 字母全部小写

1 s='Hello World!'

2 s2=s.upper()3 s3=s.lower()4 print(s2)#>>>HELLO WORLD!

5 print(s3)#>>>hello world!

1 #例 验证码不区分大小写

2 code = 'QcaR'.upper()3 your_code =input('请输入验证码:').upper()4 if your_code ==code :5 print('验证成功')

3)swapcase()  大小写翻转

1 s='Hello World!'

2 s1=s.swapcase()3 print(s1)#>>>hELLO wORLD!

4)title()  非字母的元素隔开的每个单词首字母大写

1 msg='hello world_hello*world'

2 print(msg.title())#>>>Hello World_Hello*World

5)center() 内容居中,总长度自己设定,默认填充None

1 s='Hello World!'

2 s1=s.center(20,"*")3 s2=s.center(20,)4 print(s1)#>>>****Hello World!****

5 print(s2)#>>> Hello World!

6)*** strartwith() 判断以什么为开头      *** endswith() 判断以什么为结尾

1 s='Hello World!'

2 s1=s.startswith('H')3 print(s1)#>>>True

4 s2=s.startswith('He')5 print(s2)#>>>True

6 s3=s.startswith('e',1,5)#切片截取的字符串是否以‘e’为开头

7 print(s3)#>>>True

8 s4=s.endswith('!')9 print(s4)#>>>True

7)strip() 去除首位的空格,制表符\t,换行符\n。不仅仅是去除空格

注:lstrip() 只除字符串左边的;rstrip() 只除字符串右边的;

1 s='Hello World!'

2 ss='\tHello World!\n'

3 s1=s.strip()4 print(s1)#>>>Hello World!

5 s2=ss.strip()6 print(s2)#>>>Hello World!

7 sss='tHello World!te'

8 s3=sss.strip('t')#去掉字符串首尾的‘t’

9 print(s3)#>>>Hello World!te

10 s4=sss.strip('tey')#跌带去除首尾的‘t’、‘e’、‘y’,无序

11 print(s4)#>>>Hello World!

1 #例 去除用户输入的空格

2 name = input('>>>').strip()3 if name == 'oldboy':4 print('验证成功')

8)#split()  字符串 转化 列表

1 s='Hello World!'

2 s1=s.split()3 print(s1)#>>>['Hello', 'World!']

4 ss='He,llo Wo,rld!'

5 s2=ss.split(',')6 print(s2)#>>>['He', 'llo Wo', 'rld!']

7 sss='oHello World!'

8 s3=sss.split('o')9 print(s3)#>>>['', 'Hell', ' W', 'rld!']

10 s4=sss.split('o',1)11 print(s4)#>>>['', 'Hello World!']

9)join()  将列表 转化 字符串

注:如果列表里是非字符串元素,会报错

s='Hello World!'s1='+'.join(s)print(s1)#>>>H+e+l+l+o+ +W+o+r+l+d+!

s2='_'.join(s)print(s2)#>>>H_e_l_l_o_ _W_o_r_l_d_!

ss=['Hello','World','!']

s3='_'.join(ss)print(s3)#>>>Hello_World_!

10)replace() 把字符串的旧字符串替换成新的字符串,如果指定第三个参数max,则替换不超过max次。

语法:str.replace(old,new[,max])

1 s='Hello World!'

2 s1=s.replace('W','w')3 print(s1)#>>>Hello world!

11)find()  通过元素找索引     index()  通过元素找索引 找不到元素会报错

1 s='Hello World!'

2 s1=s.find("e",1,6)3 print(s1)#>>>1

4 s2=s.find("m",1,6)5 print(s2)#>>>-1

6 s2=s.index("o",1,6)7 print(s2)#>>>4

12)formac()   格式化输出

1 s1='我叫{},今年{}岁,爱好{}'.format('Lucy','18','羽毛球')2 print(s1)#>>>我叫Lucy,今年18岁,爱好羽毛球

3 s2='我叫{0},今年{1}岁,爱好{2}'.format('Lucy','18','羽毛球')#可以按照索引进行替换

4 print(s2)#>>>我叫Lucy,今年18岁,爱好羽毛球

13)is系列

1 s='a123'

2 print(s.isdigit())#字符串由数字组成

3 print(s.isalpha())#字符串由字母组成

4 print(s.isalnum())#字符串由字母或数字组成

14)公共方法 :len()  返回对象的长度或项目个数; count() 数字字符串的元素出现的个数

1 s='hello world'

2 s1=len(s)3 print(s1)#>>>11

4 s2=s.count("l",0,10)5 print(s2)#>>>3

四、列表

列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组。列表相比于字符串,不仅可以储存不同的数据类型,而且可以储存大量数据,32位python的限制是 536870912 个元素,64位python的限制是 1152921504606846975 个元素。而且列表是有序的,有索引值,可切片,方便取值。

1、增

1 #append() 在最后追加元素,无返回值

2 l1=[111,'aaa',222,'bbb']3 l1.append('123abc')4 print(l1)#>>>[111, 'aaa', 222, 'bbb', '123abc']

5 #insert() 插入

6 l2=[111,'aaa',222,'bbb']7 l2.insert(1,'ccc')8 print(l2)#>>>[111, 'ccc', 'aaa', 222, 'bbb']

9 #extend 迭代着增加

10 l3=[111,'aaa',222,'bbb']11 l3.extend('ddd')12 print(l3)#>>>[111, 'aaa', 222, 'bbb', 'd', 'd', 'd']

13 l4=[111,'aaa',222,'bbb']14 l4.extend(['333','444'])15 print(l4)#>>>[111, 'aaa', 222, 'bbb', '333', '444']

列表的增

2、删

1 #pop 按照索引删除,有返回值,增删改查中唯一一个有返回值的

2 l1=[111,'aaa',222,'bbb']3 print(l1.pop(0))#>>>111

4 print(l1)#>>>['aaa', 222, 'bbb']

5 #remove

6 l1=[111,'aaa',222,'bbb']7 l1.remove('aaa')8 print(l1)#>>>[111, 222, 'bbb']

9 #clear 清空列表,删除内容,但是在内存中还占用空间

10 l1=[111,'aaa',222,'bbb']11 l1.clear()12 print(l1)#>>>[]

13 #del 内存级别删除列表

14 l1=[111,'aaa',222,'bbb']15 dell116 print(l1)#报错,内存中删除列表

17 #del 按照元素删除

18 l1=[111,'aaa',222,'bbb']19 del l1[1]20 print(l1)#>>>[111, 222, 'bbb']

21 #del 切片删除

22 l1=[111,'aaa',222,'bbb']23 del l1[:3]24 print(l1)#>>>['bbb']

列表的删

3、改

1 #按照索引去改

2 l1=[111,'aaa',222,'bbb']3 l1[2]='ccc'

4 print(l1)#>>>[111, 'aaa', 'ccc', 'bbb']

5 #按切片去改 1.按切片的元素删除;2.按照添加的组成最小元素添加

6 l1=[111,'aaa',222,'bbb']7 l1[:2]='abc'

8 print(l1)#>>>['a', 'b', 'c', 222, 'bbb']

列表的改

4、查

1 li=[111,'aaa',222,'bbb']2 #按照索引去查

3 print(li[1])#>>>aaa

4 print(li[-1])#>>>bbb

5 #按照切片查询

6 print(li[:2])#>>>[111, 'aaa']

7 print(li[:3:2])#>>>[111, 222]

8 #循环for

9 for i inli:10 print(i)

列表的查

5、其他方法

1 #count 计数

2 l1=[111,'aaa',222,'bbb','aaa']3 print(l1.count('aaa'))#>>>2

4 #len 返回对象的长度

5 print(len(l1))#>>>5

6 #通过元素找索引 列表中只有index

7 print(l1.index('aaa'))#>>>1

8 #排序

9 #sort() 从小到大或从大到小排序

10 l1=[3,6,4,7,6,9,1,2,5,0]11 l1.sort()#从小到大排序

12 print(l1)#>>>[0, 1, 2, 3, 4, 5, 6, 6, 7, 9]

13 l1.sort(reverse=True)#从大到小排序

14 print(l1)#>>>[9, 7, 6, 6, 5, 4, 3, 2, 1, 0]

15 #reverse 反向排序

16 l1=[3,6,4,7,6,9,1,2,5,0]17 l1.reverse()18 print(l1)#>>>[0, 5, 2, 1, 9, 6, 7, 4, 6, 3]

count() len() sort() reverse()

6、列表的嵌套

1 l1=[111,'aaa',222,'bbb',['ccc','ddd',10]]2 #1.将aaa全部变成大写

3 #方法一

4 l1[1]='AAA'

5 print(l1)#>>>[111, 'AAA', 222, 'bbb', ['ccc', 'ddd',10]]

6 #方法二

7 l1[1]=l1[1].upper()8 print(l1)#>>>[111, 'AAA', 222, 'bbb', ['ccc', 'ddd',10]]

9 #2.给['ccc','ddd']追加'eee'

10 l1[-1].append('eee')11 print(l1)#>>>[111, 'aaa', 222, 'bbb', ['ccc', 'ddd',10, 'eee']]

12 #3.将'ccc'首字母大写

13 l1[-1][0]=l1[-1][0].capitalize()14 print(l1)#>>>[111, 'aaa', 222, 'bbb', ['Ccc', 'ddd',10]]

15 #4.将10通过数字相加,或者字符串相加等等,变成‘100’

16 #方法一

17 l1[-1][-1]=str(l1[-1][-1]+90)18 print(l1)#>>>[111, 'aaa', 222, 'bbb', ['ccc', 'ddd', '100']]

19 #方法二

20 l1[-1][-1]=str(l1[-1][-1])+'0'

21 print(l1)#>>>[111, 'aaa', 222, 'bbb', ['ccc', 'ddd', '100']]

列表的嵌套

五、字典

字典的key是唯一的。key必须是不可变的数据类型,value是任意数据类型。

数据类型分类:

不可变数据类型(可哈希):str,bool,tuple,int。

可变数据类型(不可哈希):dict,list,set。

容器类数据类型:list,tuple,dict,set。

字典:存储数据多,关系型数据,查询速度快(二分查找)

二分查找:也称折半查找(Binary Search),它是一种高效率的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中的元素按关键字有序排列。

备注:python3.5以前 (包含3.5),字典无序

python3.6以后 (包含3.6),进行了优化,不清楚到底是有序还是无序

1 dic={'name':'lucy','age':'18',[1,2,3]}2 print(dic)#输出时会报错,因为列表是不可哈希类型

1、增

1 #'='有则覆盖,无则添加

2 dic={'name':'lucy','age':'18','hobby':'羽毛球'}3 dic['high']=170#有则不变,无则添加

4 print(dic)#>>>{'name': 'lucy', 'age': '18', 'hobby': '羽毛球', 'high': 170}

5 #setdefault() 有则不变,无则添加

6 dic={'name':'lucy','age':'18','hobby':'羽毛球'}7 dic.setdefault('high')8 print(dic)#>>>{'name': 'lucy', 'age': '18', 'hobby': '羽毛球', 'high': None}

9 dic={'name':'lucy','age':'18','hobby':'羽毛球'}10 dic.setdefault('high',170)11 print(dic)#>>>{'name': 'lucy', 'age': '18', 'hobby': '羽毛球', 'high': 170}

12 dic.setdefault('name','lily')#>>>{'name': 'lucy', 'age': '18', 'hobby': '羽毛球', 'high': 170}

13 print(dic)

列表的增

2、删

1 #pop() pop根据key删除键值对,并返回对应的值,如果没有key则返回默认返回值

2 dic={'name':'lucy','age':'18','hobby':'羽毛球'}3 print(dic.pop('name'))#>>>lucy

4 print(dic)#>>>{'age': '18', 'hobby': '羽毛球'}

5 #pop() 删除不存在的键不会报错,返回对应的值

6 dic={'name':'lucy','age':'18','hobby':'羽毛球'}7 print(dic.pop('name1',None))#>>>None None位置可以输入任意值

8 print(dic)#>>>{'name': 'lucy', 'age': '18', 'hobby': '羽毛球'}

9 #clear() 清空字典

10 dic.clear()11 print(dic)#>>>{}

12 #del() 内存级别删除

13 deldic14 print(dic)#打印时会报错,因为在内存级别已经删除

15 dic={'name':'lucy','age':'18','hobby':'羽毛球'}16 del dic['age']17 print(dic)#>>>{'name': 'lucy', 'hobby': '羽毛球'}

18 #popitem()随机删除字典中的某个键值对,将删除的键值对以元祖的形式返回,在python3.6以后,默认删除最后一个键值对

19 dic={'name':'lucy','age':'18','hobby':'羽毛球'}20 print( dic.popitem())#>>>('hobby', '羽毛球')

21 print(dic)#>>>{'name': 'lucy', 'age': '18'}

列表的删

3、改

1 #'='

2 dic={'name':'lucy','age':'18','hobby':'羽毛球'}3 dic['name']='Lily'

4 print(dic)#>>>{'name': 'Lily', 'age': '18', 'hobby': '羽毛球'}

5 #update() 将dic1覆盖添加dic2中 ,dic1不变

6 dic1={'name':'lucy','age':'18','hobby':'羽毛球'}7 dic2={'name':'Lily','high':170}8 dic2.update(dic1)9 print(dic2)#>>>{'name': 'lucy', 'high': 170, 'age': '18', 'hobby': '羽毛球'}

列表的改

4、查

1 #直接按照键查找

2 dic={'name':'lucy','age':'18','hobby':'羽毛球'}3 print(dic['name'])#>>>lucy

4 #get() 查不到不会报错,返回None

5 print(dic.get('name1'))#>>>None

6 print(dic.get('name1','没有此key'))#>>>没有此key

7

8 #keys() values() items()

9 dic={'name':'lucy','age':'18','hobby':'羽毛球'}10 #keys()

11 print(dic.keys())#>>>dict_keys(['name', 'age', 'hobby'])

12 print(list(dic.keys()))#>>>['name', 'age', 'hobby']

13 #values()

14 print(dic.values())#>>>dict_values(['lucy', '18', '羽毛球'])

15 print(list(dic.values()))#>>>['lucy', '18', '羽毛球']

16 #items()

17 print(dic.items())#>>>dict_items([('name', 'lucy'), ('age', '18'), ('hobby', '羽毛球')])

18 print(list(dic.items()))#>>>[('name', 'lucy'), ('age', '18'), ('hobby', '羽毛球')]

19 #for循环取值

20 dic={'name':'lucy','age':'18','hobby':'羽毛球'}21 for i indic.keys():22 print(i)23 for i indic.values():24 print(i)25 for i indic.items():26 print(i)27 for k,v indic.items():28 print(k,v)29 #分别赋值

30 a,b=1,2

31 print('a=',a,'b=',b)#>>>a= 1 b= 2

32 a,b=b,a33 print('a=',a,'b=',b)#>>>a= 2 b= 1

34 a,b,c=['Lily','Lucy','Lucas']35 print('a=',a,'b=',b,'c=',c)#>>>a= Lily b= Lucy c= Lucas

列表的查

5、公共方法 len()

1 dic={'name':'lucy','age':'18','hobby':'羽毛球'}2 print(len(dic))#>>>3

6、fromkeys() 创建字典一种,以fromkeys()创建的键值对,如果值是列表的话,多个共用的都是一个列表

1 dic={}2 dic1=dic.fromkeys('abc','张三')3 print(dic1)#>>>{'a': '张三', 'b': '张三', 'c': '张三'}

4 dic2=dic.fromkeys([1,2,3],'李四')5 print(dic2)#>>>{1: '李四', 2: '李四', 3: '李四'}

6 dic3=dic.fromkeys('abc',[])7 dic3['a'].append('张三')8 print(dic3)#>>>{'a': ['张三'], 'b': ['张三'], 'c': ['张三']}

7、字典的嵌套

1 dic ={2 'name_list':['b哥', '张帝', '人帅', 'kitty'],3 '老男孩':{4 'name':'老男孩',5 'age': 46,6 'sex': 'ladyboy',7 }8 }9 #1、['b哥', '张帝', '人帅', 'kitty']追加一个骑兵

10 dic['name_list'].append('骑兵')11 print(dic)12 #2、将kitty全部变成大写

13 dic['name_list'][-1]=dic['name_list'][-1].upper()14 print(dic)15 #3、将'name':'老男孩',老男孩改成oldboy

16 dic['老男孩']['name']='oldboy'

17 print(dic)18 #4、将ladyboy首字母大写

19 dic['老男孩']['sex']=dic['老男孩']['sex'].capitalize()20 print(dic)

六、元组

python的元组与列表类型,不同之处在于元组的元素不能修改(增删改)。

元组使用小括号(),列表使用方括号[]。

元组创建很简单,只需要在括号里添加元素,并使用逗号隔开即可。

1 tu=(11,2,True,[2,3,4],'alex')2 #循环查询

3 #for i in tu:

4 #print(i)

5 #切片查询

6 print(tu[1])#>>>2

7 print(tu[:3:2])#>>>(11, True)

8 #index() 通过元素找索引 count() 元素出现的个数 len() 元素的个数

9 print(tu.index(True))#>>>2

10 print(tu.count(2))#>>>1

11 print(len(tu))#>>>5

12 #元素里面的元素可以修改

13 tu[-2].append('a')14 print(tu)#(11, 2, True, [2, 3, 4, 'a'], 'alex')

元组的查

七、集合

集合:无序不重复的数据类型。它里面的元素必须是可哈希的,但是集合本身是不可哈希的。

1、关系测试,交集,并集,子集,差集

2、去重(列表的去重)

1 set1={1,'alex',False,(1,2,3)}2 l1=[1,1,2,2,3,3,4,5,6,6]3 l2=(list(set(l1)))4 print(l2)#>>>[1, 2, 3, 4, 5, 6]

1、增删改查

1#集合的增无序2set1={'Lily','Lucy'}3set1.add('Lucas')4print(set1)#>>>{'Lucas','Lily','Lucy'}5#跌带着增加update()6set1={'Lily','Lucy'}7set1.update('Lucas')8print(set1)#>>>{'a','Lily','u','c','L','s','Lucy'}9#集合的删10#remove()按照元素删除11set1={'Lily','Lucy'}12set1.remove('Lucy')13print(set1)#>>>{'Lily'}14#pop()随机删除一个元素15set1={'Lily','Lucy'}16set1.pop()17print(set1)#>>>{'Lucy'}18#clear()清空集合19set1={'Lily','Lucy'}20set1.clear()21print(set1)#>>>set()22#del()内存级别删除集合23set1={'Lily','Lucy'}24delset125print(set1)#报错

集合的增删改查

2、集合其他操作

1)交集

1 set1={1,2,3,4,5}2 set2={4,5,6,7,8}3 print(set1 & set2 )#>>>{4, 5}

4 print(set1.intersection(set2))#>>>{4, 5}

2)并集

1 set1={1,2,3,4,5}2 set2={4,5,6,7,8}3 print(set1 | set2)#>>>{1, 2, 3, 4, 5, 6, 7, 8}

4 print(set1.union(set2))#>>>{1, 2, 3, 4, 5, 6, 7, 8}

3)差集

1 set1={1,2,3,4,5}2 set2={4,5,6,7,8}3 print(set1 - set2)#>>>{1, 2, 3}

4 print(set1.difference(set2))#>>>{1, 2, 3}

4)反交集

1 set1={1,2,3,4,5}2 set2={4,5,6,7,8}3 print(set1 ^ set2 )#>>>{1, 2, 3, 6, 7, 8}

4 print(set1.symmetric_difference(set2))#>>>{1, 2, 3, 6, 7, 8}

5)子集

1 set1={1,2,3}2 set2={1,2,3,4,5,6}3 print(set1 < set2)#>>>True

4 print(set1.issubset(set2))#>>>True

6)超集

1 set1={1,2,3}2 set2={1,2,3,4,5,6}3 print(set2 > set1)#>>>True

4 print(set2.issuperset(set1))#>>>True

7)frozenset不可变集合,让集合变成不可变类型

1 s=frozenset('abc')2 s1=frozenset({4,5,6,7,8})3 print(s,type(s))#>>>frozenset({'c', 'b', 'a'})

4 print(s1,type(s1))#>>>frozenset({4, 5, 6, 7, 8})

八、数据类型的补充

1 #range 可定制的数字列表 顾头不顾尾 一般与for()循环一起使用

2 for i in range(10):3 print(i)#输出1到9

4 #加步长

5 for i in range(1,10,2):6 print(i)#输出1,3,5,7,9

7 for i in range(10,1,-1):8 print(i)#输出10到2

9 print(range(10))#>>>range(0, 10)

10

11 #切片删除

12 l1=['Lily','Lucy','Lucas','Amy']13 del l1[1::2]14 print(l1)#>>>['Lily', 'Lucas']

15

16 #循环删除 在循环一个列表时,不要对列表进行删除的动作(改变列表元素的个数动作),会出错

17 #从后往前删除

18 l1=['Lily','Lucy','Lucas','Amy']19 for i in range(len(l1)-1,-1,-1):20 if i % 2 == 1:21 dell1[i]22 print(l1)#>>>['Lily', 'Lucas']

23

24 #dic{} 在循环字典时,不要对字典的进行删除和增加

25 dic={'k1':'v1','k2':'v2','k3':'v3','a1':'b1'}26 l1=[]27 for i indic:28 if 'k' ini:29 l1.append(i)30 for i inl1:31 deldic[i]32 print(dic)#>>>{'a1': 'b1'}

33

34 #tu元组 如果元组里面只有一个元素并且没有逗号隔开,name他的数据类型与该元素一致

35 tu1=(1)36 print(tu1,type(tu1))#>>>1

37 tu2=('Lucy')38 print(tu2,type(tu2))#>>>Lucy

39 tu3=(['alex',1,2])40 print(tu3,type(tu3))#>>>['alex', 1, 2]

九、深浅copy

1,先看赋值运算。

l1 = [1,2,3,['barry','alex']]

l2 = l1

l1[0] = 111

print(l1) # [111, 2, 3, ['barry', 'alex']]

print(l2) # [111, 2, 3, ['barry', 'alex']]

l1[3][0] = 'wusir'

print(l1) # [111, 2, 3, ['wusir', 'alex']]

print(l2) # [111, 2, 3, ['wusir', 'alex']]

对于赋值运算来说,l1与l2指向的是同一个内存地址,所以他们是完全一样的。

2,浅拷贝copy。

l1 = [1,2,3,['barry','alex']]

l2 = l1.copy()

print(l1,id(l1)) # [1, 2, 3, ['barry', 'alex']] 2380296895816

print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2380296895048

l1[1] = 222

print(l1,id(l1)) # [1, 222, 3, ['barry', 'alex']] 2593038941128

print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2593038941896

l1[3][0] = 'wusir'

print(l1,id(l1[3])) # [1, 2, 3, ['wusir', 'alex']] 1732315659016

print(l2,id(l2[3])) # [1, 2, 3, ['wusir', 'alex']] 1732315659016

对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。

3,深拷贝deepcopy。

import copy

l1 = [1,2,3,['barry','alex']]

l2 = copy.deepcopy(l1)

print(l1,id(l1)) # [1, 2, 3, ['barry', 'alex']] 2915377167816

print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2915377167048

l1[1] = 222

print(l1,id(l1)) # [1, 222, 3, ['barry', 'alex']] 2915377167816

print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2915377167048

l1[3][0] = 'wusir'

print(l1,id(l1[3])) # [1, 222, 3, ['wusir', 'alex']] 2915377167240

print(l2,id(l2[3])) # [1, 2, 3, ['barry', 'alex']] 2915377167304

对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值