Python基础七(深浅copy)

一、字符串用法回顾

基础数据类型,总结补充.
int:bit_lenth()
str:
captilze()                  首字母大写,其余小写.
upper()                     全大写.
lower()                     全小写.
find()        通过元素找索引,没有返回-1,有切片.
index()       通过元素找索引,没有回报错.有切片
swapcase()    大小写反转.
strip()       去除前后端的空格,\n,\t,
strip('abc')     去除前后端的a ,b,c三个元素,
ltrip ,rtrip
title        非字母隔开的部分,首字母大写
split str---> list    默认以空格(可以设定分隔符),
startswith      判断s以什么开头,返回bool值,可以切片
endswith      判断以什么结尾,返回bool值,可以切片
replace(old,new)  默认不写次数,全体换
center       以其为中心,默认填充物 空格.
count       计算元素出现的次数.
len()        测量字符串的长度.
join '' '*' '_'.... .join(interable)
isalpha()      全都是字母组成
isdigit()       全都是数字组成
isalnum()      全都是字母或者数字
'%s' %(name)
name1 = 'taibai '
'%(name)s' %{name:name1}
format
'{}{}{}'.format(name,age,hobby)
'{0}{1}{2}{1}'.format(name,age,bobby)
'{name},{age}'.format(age=12,name='太白')

s = ' ' #只能是以至少一个空格组成的字符串(全空格)
print(s.isspace())-----Ture

二、元组小知识点补充

当元组只有一个元素组成并且没有‘,’
则该元素是什么数据类型,整体就是什么数据类型.
tu = (1)
tu1 = (1,)
print(tu,type(tu))
print(tu1,type(tu1))
tu = ('alex')
tu1 = ('alex',)
print(tu,type(tu))
print(tu1,type(tu1))
tu = ([1,2,3])
tu1 = ([1,2,3],)
print(tu,type(tu))
print(tu1,type(tu1))
对应输出
1 <class 'int'>
(1,) <class 'tuple'>
alex <class 'str'>
('alex',) <class 'tuple'>
[1, 2, 3] <class 'list'>
([1, 2, 3],) <class 'tuple'>

  

三、list 、dic补充

1、list补充

l1 = [111,222,333,444,555] #将索引为奇数位的元素删除.
方法一:
l1 = [111,222,333,444,555]
l2 = []
for i in range(len(l1)):
    if i % 2 == 0:
        l2.append(l1[i])
l1 = l2
print(l1)

方法二:
l1 = [111,222,333,444,555]
for i in range(1,len(l1)):
    if i <= 2 :
        l1.pop(i)
print(l1)

方法三:
l1 = [111,222,333,444,555,666,777]
#
del l1[1::2]
print(l1)
方法四:
l1 = [111,222,333,444,555]
for i in range(len(l1)-1,0,-1):
    if i % 2 == 1:
        del l1[i]
print(l1)

总结:
在循环一个列表时,如果要是删除某些或者某类元素,容易出错

  

2、dic补充

fromkeys()用法
dic = dict.fromkeys('abc','alex')
print(dic)
dic1 = dict.fromkeys([1,2,3],[])
print(dic1)
dic1[1].append('alex')
print(dic1)

输出
{'a': 'alex', 'b': 'alex', 'c': 'alex'}
{1: [], 2: [], 3: []}
{1: ['alex'], 2: ['alex'], 3: ['alex']}

  

补充二、

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

for i in dic:
    if 'k' in i:
        del dic[i]-------不可行

l1 = []
for i in dic:
    if 'k' in i:
        l1.append(i)
print(l1)

for k in l1:
    del dic[k]
print(dic)


总结
在循环一个字典时,如果删除某些键值对,可能会报错,可转化成列表形式操作.

  

四、数据类型间的转化

数据类型之间的转化:
int <---> str
int <---> bool
str <--->.bool
     split
str <------> list
     join
tuple <---> list

  

元组>>>>>>列表
l1 = [1,2,3]
tu = tuple(l1)
l2 = list(tu)
print(tu,l2)------(1, 2, 3) [1, 2, 3]


#dict专属类型:与list转换
dic = {'k1':'alex','k2':'太白','k3':'日天','name':'wusir'}
print(list(dic.keys()))------['k1', 'k2', 'k3', 'name']
print(list(dic.values()))---['alex', '太白', '日天', 'wusir']
print(list(dic.items()))-----[('k1', 'alex'), ('k2', '太白'), ('k3', '日天'), ('name', 'wusir')]

  

五、深浅copy

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

s1 = 'alex'
s2 = s1
s1 = 'alex2'
print(s1,id(s1))
print(s2,id(s2))
输出
alex2 31133624
alex 31133568

覆盖s1的值,id地址不一样

浅copy

l1 = [1,[22,33],2,3]
l2 = l1.copy()
l1.append(666)
print(l1,id(l1))------[1, [22, 33], 2, 3, 666] 42571272
print(l2,id(l2))------[1, [22, 33], 2, 3] 42570696
#对于浅copy来说,第一层都是独立的内存地址,从第二层开始,都是指向同一个内存地址,一变都变
l1 = [1,[22,33,],2,3]
l2 = l1.copy()
l1[1].append(666)
print(l1,id(l1),id(l1[1]))-------[1, [22, 33, 666], 2, 3] 36122248 42636232
print(l2,id(l2),id(l2[1]))-------[1, [22, 33, 666], 2, 3] 42637832 42636232

 deepcopy   深copy

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

import copy
l1 = [1,[22,33,],2,3]
l2 = copy.deepcopy(l1)
l1.append(777)
l1[1].append(666)
print(l1,id(l1),id(l1[1]))---[1, [22, 33, 666], 2, 3, 777] 42571336 42571272
print(l2,id(l2),id(l2[1]))---[1, [22, 33], 2, 3] 42747208 42747080

  补充

l1 = [1,[1,2],2,3]
l2 = l1[:]  # 是浅copy
l1[1].append(111)
print(l1,l2)---[1, [1, 2, 111], 2, 3] [1, [1, 2, 111], 2, 3]

 

posted @ 2018-01-29 21:18  GuoXY  阅读(126)  评论(0编辑  收藏  举报