Python基础七(深浅copy以及int,str,tuple,list,dic补充)

一:int,str,tuple,list,dic之间的转换及其补充

1.转换

1)int与str的转换
int ----> str   str(int)
str ----> int   int(str)      条件:全部由数字组成的字符串可以转化成数字

 

2)int与bool的转换
int ----> bool  非0是True   0是False
bool----> int   True是1     False是0

 

3)str与bool的转换
str ----> bool  非空是True   空('')是False
bool----> str       'True'          'False'

 

4)str与list的转化
str ----> list  split()      ()里有没有内容整个变成列表,()里有内容按内容分割成列表内元素,且()里内容不存在


例如:
s = 'alex,wusir,taibai'
l1 = s.split()
print(l1)             输出结果:['alex,wusir,taibai']
l2 = s.split(',')
print(l2)            输出结果:['alex', 'wusir', 'taibai']
l3 = s.split('a')
print(l3)            输出结果:['', 'lex,wusir,t', 'ib', 'i']


list ----> str   用 ''.join()


例如:
li = ['alex','wusir','taibai']
s1 = ''.join(li)
print(s1)           输出结果:alexwusirtaibai
s2 = '_'.join(li)
print(s2)             输出结果:alex_wusir_taibai
split ,join 的用法

 

5)list与tuple的转换 (与int和str之间的转换相似
tu = (1,2,3,{},[])
l1 = list(tu)
print(l1)             输出结果:[1, 2, 3, {}, []]

li = [1,2,3,{},()]
t1 = tuple(li)
print(t1)             输出结果:(1, 2, 3, {}, ())
View Code

 

6)dic的特有类型与list的转换
dic = {'k1':'alex','k2':'太白','k3':'日天','name':'wusir'}
print(dic.keys())             输出结果:dict_keys(['k1', 'k2', 'k3', 'name'])
print(list(dic.keys()))       输出结果:['k1', 'k2', 'k3', 'name']
print(dic.values())           输出结果:dict_values(['alex', '太白', '日天', 'wusir'])
print(list(dic.values()))     输出结果:['alex', '太白', '日天', 'wusir']
print(dic.items)              输出结果:不能这样写,需要两个变量接收
print(list(dic.items()))      输出结果:[('k1', 'alex'), ('k2', '太白'), ('k3', '日天'), ('name', 'wusir')]
View Code

 

2.tuple的补充

当元组只有一个元素组成并且没有逗号则该元素是什么数据类型,整体就是什么数据类型.

tu = ([1,2,3])
tu1 = ([1,2,3],)
print(tu,type(tu))           输出结果:[1, 2, 3] <class 'list'>
print(tu1,type(tu1))         输出结果:([1, 2, 3],) <class 'tuple'>
tu.append('333')
print(tu,type(tu))           输出结果:[1, 2, 3, '333'] <class 'list'>

 

3.list以及dic的删除

1)list的删除(用for循环时索引值在变化直接删除会报错)
li = [111,222,333,444,555]      #将索引为奇数位的元素删除.
# 第一种:
del li[1::2]
print(li)

# 第二种:
li = [111,222,333,444,555]     
l2 = []
for i in range(len(li)):
    if i % 2 == 0:
        l2.append(li[i])
li = l2
print(li)

# 第三种:
li = [111,222,333,444,555]
for i in range(len(li)-1,0,-1):      #倒着删除的时候索引不会发生变化,所以不会报错
    if i % 2 == 1:
        del li[i]
print(li)
三种方式

 

2)dic的删除

不可变的数据类型:可哈希

dic = {'k1':'alex','k2':'太白','k3':'日天','name':'wusir'}       #删除含'k'元素的键值对
li = []
for k in dic:
    if 'k' in k:
        li.append(k)                 #把dic的keys添加到列表中再去删除
for i in li:
    del dic[i]
print(dic)

 

4.fromkeys()的用法

fromkeys()

dic = dict.fromkeys('abc','alex')
print(dic)                                              dic中的keys(字符串)中的元素迭代增加成新的键key,value值不变化
输出结果:{'a': 'alex', 'b': 'alex', 'c': 'alex'}

dic1 = dict.fromkeys([1,2,3],[])
print(dic1)                                             dic中的keys(列表)中的元素 迭代增加成新的键key,value值不变                                             
输出结果:{1: [], 2: [], 3: []}

dic1[1].append('alex')
print(dic1)                                             dic中迭代增加后一个value变化,其他的value值对应变化成该值
输出结果:{1: ['alex'], 2: ['alex'], 3: ['alex']}

 

二.list深浅拷贝

1.赋值运算

比较下面两个
l1 = [1,2,3,4,'5']
l2 = l1
l1 = [1,2,3,4,'5',6]
print(l1)             输出结果:[1, 2, 3, 4, '5', 6]
print(l2)             输出结果:[1, 2, 3, 4, '5']

l1 = [1,2,3,4,'5']
l2 = l1                                对于赋值运算,就是指向同一内存地址
l1.append(6)
print(l1)             输出结果:[1, 2, 3, 4, '5', 6]
print(l2)             输出结果:[1, 2, 3, 4, '5', 6]

 

2.浅拷贝

第一种:
l1 = [1,2,3,4,'5']
l2 = l1.copy()
l1.append(6)
print(l1)             输出结果:[1, 2, 3, 4, '5', 6]
print(l2)             输出结果:[1, 2, 3, 4, '5']

第二种
l1 = [1,2,3,[6,7,8],4,'5']
l2 = l1.copy()        #补充:l2 = l1[:](相当于浅拷贝)
l1[3].append('9')
print(l1)             输出结果:[1, 2, 3, [6, 7, 8, '9'], 4, '5']
print(l2)             输出结果:[1, 2, 3, [6, 7, 8, '9'], 4, '5']


对于浅copy来说,第一层都是独立的内存地址,从第二层开始,都是指向同一个内存地址,一变都变.

 

3.深拷贝

import copy
l1 = [1,2,3,[6,7,8],4,'5']
l2 = copy.deepcopy(l1)
l1.append('0')
l1[3].append('9')
print(l1)             输出结果:[1, 2, 3, [6, 7, 8, '9'], 4, '5', '0']
print(l2)             输出结果:[1, 2, 3, [6, 7, 8], 4, '5']


对于深copy,无论多少层,在内存中都是两个独立的内存地址.

 

三.dic的深浅拷贝(与list的深浅拷贝类似)

1.浅拷贝

#第一种
dic1 = {1:'alex',2:['a','b'],3:('c','d')}
dic2 = dic1.copy()
dic1[1] = 'taibai'
print(dic1)             输出结果:{1: 'taibai', 2: ['a', 'b'], 3: ('c', 'd')}
print(dic2)             输出结果:{1: 'alex', 2: ['a', 'b'], 3: ('c', 'd')}

#第二种
dic1 = {1:'alex',2:['a','b'],3:('c','d'),4:{'name':'zhu','age':18}}
dic2 = dic1.copy()
dic1[4]['name'] = 'taibai'
print(dic1)            输出结果:{1: 'alex', 2: ['a', 'b'], 3: ('c', 'd'), 4: {'name': 'taibai', 'age': 18}}
print(dic2)            输出结果:{1: 'alex', 2: ['a', 'b'], 3: ('c', 'd'), 4: {'name': 'taibai', 'age': 18}}
浅拷贝

 

2.深拷贝

import copy
dic1 = {1:'alex',2:['a','b'],3:('c','d'),4:{'name':'zhu','age':18}}
dic2 = copy.deepcopy(dic1)
dic1[1] = 'taibai'
dic1[4]['name'] = 'wusir'
print(dic1)            输出结果:{1: 'taibai', 2: ['a', 'b'], 3: ('c', 'd'), 4: {'name': 'wusir', 'age': 18}}
print(dic2)            输出结果:{1: 'alex', 2: ['a', 'b'], 3: ('c', 'd'), 4: {'name': 'zhu', 'age': 18}}
深拷贝

 

posted @ 2018-01-29 17:30  忆殇★伤忆  阅读(767)  评论(0编辑  收藏  举报