xingyemdd

导航

 

一、数字int

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

 1 '''
 2 bit_length()将十进制转化为二进制站的位数
 3 二进制             十进制
 4 0000 0001            1
 5 0000 0010            2
 6 0000 0011            3
 7 0000 0100            4
 8 '''
 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       ---> True
 7    bool---> int :int(True)---> 1      int(False)---> 0
 8    str ---> bool:空字符串  ---> False  非空字符串---> True
 9 '''
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 del l1
16 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 in li:
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 del dic
14 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 in dic.keys():
22     print(i)
23 for i in dic.values():
24     print(i)
25 for i in dic.items():
26     print(i)
27 for k,v in dic.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,a
33 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'}) <class 'frozenset'>
4 print(s1,type(s1))#>>>frozenset({4, 5, 6, 7, 8}) <class 'frozenset'>

 八、数据类型的补充

 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         del l1[i]
22 print(l1)#>>>['Lily', 'Lucas']
23 
24 #dic{} 在循环字典时,不要对字典的进行删除和增加
25 dic={'k1':'v1','k2':'v2','k3':'v3','a1':'b1'}
26 l1=[]
27 for i in dic:
28     if 'k' in i:
29         l1.append(i)
30 for i in l1:
31     del dic[i]
32 print(dic)#>>>{'a1': 'b1'}
33 
34 #tu元组  如果元组里面只有一个元素并且没有逗号隔开,name他的数据类型与该元素一致
35 tu1=(1)
36 print(tu1,type(tu1))#>>>1 <class 'int'>
37 tu2=('Lucy')
38 print(tu2,type(tu2))#>>>Lucy <class 'str'>
39 tu3=(['alex',1,2])
40 print(tu3,type(tu3))#>>>['alex', 1, 2] <class 'list'>

 九、深浅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来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。

posted on 2018-04-09 23:23  xingyemdd  阅读(356)  评论(0编辑  收藏  举报