编码,数据类型补充,深浅copy

                         编码延伸
#is 判断内存id是否相同。
#==判断的是数值是否相同。
#id 测试他的内存地址。
#小数据池:
# int:-5~256
# str:只包含数字或者字母元素。
# 单个字母*int(20以内)存在小数据池的概念。
# 编码:
# ASCII:数字,字母,特殊字符。
# A:0000 0010
# unicode:万国码。
# A:0000 0000 0000 0101 0000 0101 0000 0101
# 中:0000 0000 0000 1101 0000 0000 0000 1101
# 升级:
# utf-8:最少用8位表示一个字符。
# A:0000 0010
# 欧洲:0000 0010 0000 0010
# 中:0000 0000 0000 1101 0000 0000
#
# gbk:国标,数字,字母,特殊字符,中文。
# A:0000 0010
# 中:0000 0000 0000 1101
# 不同编码之间不能互相识别。
# 在文件的存储或传输,编码是除unicode以外的任意编码
#
#
# python 3X
# str: 内部编码方式unicode:
# bytes:内部编码方式 非unicode
# 英文:
# str:内部编码方式unicode
# 表现形式:name='alex'
# bytes:内部编码方式 非unicode
# 表现形式:name=b'alex'
# 中文:
# str:内部编码方式 unicode
# 表现形式:name='中国'
# bytes:内部编码方式 非unicode
# 表现形式 name = b'\xe2\xe2\xe2\xe2\xe2\xe2'

# str--->bytes
# b1=str.encode('utf_8')
# bytes--->str
# s1=bytes.decode('utf_8')
#数据类型的补充:

# s1='中国'
# b1=s1.encode('utf_8')
# print (b1)
#utf_8 bytes---->gbk bytes
# s2=b1.decode('utf_8')
# print (s2)
# b2=s2.encode('gbk')
# print (b2)
#数据类型的补充
#1,元组
# tu1=('laonanhai')
# tu2=('laonanhai',)
# print(tu1,type(tu1))
# print(tu2,type(tu2))
#
# tu1=(1)
# tu2=(1,)
# print(tu1,type(tu1))
# print(tu2,type(tu2))

#元组里面如果只有一个元素且没有逗号,则该数据的数据类型与里面的元素相同.
# tul=([1,2,3])
# tu2=([1,2,3,],)
# print(tu1,type(tu1))
# print(tu2,type(tu2))

#list
# l1=[111,222,333,444,555,]
#索引为奇数对应的所有元素全部删除.
#方法一:
# del l1[1::2]
# print(l1)
#方法二错误展示:
# for index in range(len(l1)):
# print('删除之前的index:%s' % index)
# print('删除之前的l1:%s' % l1)
# if index % 2 ==1:
# del l1[index]
# print('删除之后的index:%s' % index)
# print('删除之后的l1:%s' % l1)
# print(l1)
#在循环一个列表时,最好不要改变列表的大小,会影响你的最终结果.
#倒着删除
# for index in range(len(l1)-1,-1,-1):
# if index % 2 ==1:
# del l1[index]
# print(l1)

#dict
# dic=dict.fromkeys('abc',666)
# print(dic)
# dic=dict.fromkeys([11,22,44,33],666)
# print(dic)
# dic=dict.fromkeys([1,2,3],[])
# dic[1].append(666)
# print(dic)
#在循环dict中,最好不要改变dict的大小,会影响结果或者报错.
#错误展示:
#dic={'k1':'v1','k2':'v2','k3':'v3','name':'alex'}
# for i in dic:
# if 'k'in i :
# del dic[i]
# print(dic)
# l1=[]
# for key in dic :
# if 'k' in key:
# l1.append(key)
# print(l1)
# for key in l1:
# del dic [key]
# print(dic)

# 数据类型的转换:
# str ---->list split
# list---->str join
#
# tuple---->list
'''
tul=(1,2,3)
l1=list(tul)
print(l1)
tu2=tuple(l1)
print(tu2)

#dic ---->list list(dic)(列表中的元素只有key)
'''
# dic={'k1':'v1','k2':'v2','k3':'v3',}
# l1=list(dic)
# print(l1)
# print(list(dic.keys()))
# print(list(dic.values()))
# print(list(dic.items()))
# print(list(dic.items()))

#0,'',[],(),{} --->bool 都是False
#print(bool([0,0,0]))

# set1={1,2,3,'abc',(1,2,3),True,}
# print(set1)
# set2={11,11,11,22,}
# print(set2)
#列表的去重
# l1=[11,11,22,22,33,33,33,44]
# l2=list(set(l1))
# l2.sort()
# print(l2)
#
# set1={'alex','WuSir','RiTiAn','egon','barry'}
#增
# set1.add('太白')
# print(set1)

# set1.update('abc')
# set1.update([111,222,333])
# print(set1)
#删
#remove 按元素删除
# set1.remove('RiTiAn')
# print(set1)
#随机删除,有返回值 pop
# print(set1.pop())
# print(set1)

#清空clear
# set1.clear()
# print(set1)

#删除整体 del
# del set1
# print(set1)

#查
# for i in set1:
# print(i)
# set1={1,2,3,4,5}
# set2={4,5,6,7,8}

#交集 & intersetion
# set3=set1 & set2
# print(set3)
# print(set1.intersection(set2))
#并集 | union
# print(set1 | set2)
# print(set1.union(set2))
#差集 - difference
# print(set1 - set2) #set1独有
# print(set2.difference(set1))#set2独有

#反交集 ^ symmetric_difference
# print(set1 ^ set2)
# print(set1.symmetric_difference(set2))
# set1={1,2,3}
# set2={1,2,3,4,5,6}
# print(set1<set2)#Ture set1是set2的子集
# print(set1.issubset(set2))#Ture set1是set2的子集
#
# print(set2>set1) #Ture set2是set1的超集
# print(set2.issuperset(set1))#Ture set2 是set1的超集
# set1=frozenset({1,2,3,'alex'})
# print(set1,type(set1))

#深浅copy
# l1=[1,2,3,]
# l2=l1
# l3=l2
# l3.append(666)
# print(l1,l2,l3)
#对于赋值运算来说,指向的都是同一个内存地址,一变就变
#浅copy
# l1=[11,22,33]
# l2=l1.copy()
# l1.append(666)
# print(l1,id(l1))
# print(l2,id(l2))
# l1=[11,22,['barry',[55,66]],[11,22]]
# l2=l1.copy()
# l1[2].append('alex')
# print(l1,id(l1))
# print(l2,id(l2))
# print(l1,id(l1[-1]))
# print(l2,id(l2[-1]))
#对于浅copy来说,对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始指向的都是同一个内存地址,
# 所以对于第二层以及更深的层数来说,保持一致性.

#深copy
# import copy
# l1=[11,22,33]
# l2=copy.deepcopy(l1)
# l1.append(666)
# print(l1,id(l1))
# print(l2,id(l2))
#
# l1=[11,22,['barry']]
# l2=copy.deepcopy(l1)
# l1[2].append('alex')
# print(l1,id(l1[-1]))
# print(l2,id(l2[-1]))

#深copy 完全独立.
# s1='alex'
# s2='alex'
# l1=[1,2,3]
# l2=[1,2,3]
# l1.append(666)
# print(l1,l2)

#对于切片来说,这是浅copy.
l1=[1,2,3,4,5,6,[11,22]]
l2=l1[:]
l1.append(666)
print(l1,l2)
# l1[-1].append(666)
# print(l1,l2)

猜你喜欢

转载自www.cnblogs.com/weilaixiaochaoren/p/9005438.html