python-day06~07_集合_深浅拷贝
python3:
str在内存中是用unicode编码,转成bytes类型后,再进行传输和存储。
ascii
A : 00000010 8位 一个字节
unicode A : 00000000 00000001 00000010 00000100 32位 四个字节
中:00000000 00000001 00000010 00000110 32位 四个字节
utf-8 A : 00100000 8位 一个字节
中 : 00000001 00000010 00000110 24位 三个字节
gbk A : 00000110 8位 一个字节
中 : 00000010 00000110 16位 两个字节
1,各个编码之间的二进制,是不能互相识别的,会产生乱码。
2,文件的储存,传输,不能是unicode(只能是utf-8 utf-16 gbk,gb2312,asciid等)。为节省空间
py3:
str 在内存中是用unicode编码。
bytes类型
对于英文:
str :表现形式:s = 'alex'
编码方式: 010101010 unicode
bytes :表现形式:s = b'alex'
编码方式: 000101010 utf-8 gbk。。。。
对于中文:
str :表现形式:s = '中国'
编码方式: 010101010 unicode
bytes :表现形式:s = b'x\e91\e91\e01\e21\e31\e32'
编码方式: 000101010 utf-8 gbk。。。。
3,dict.fromkeys用于创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值。
# dic = dict.fromkeys([1,2,3],'春哥')
# print(dic)
# dic = dict.fromkeys([1,2,3],[])
# print(dic) # {1: [], 2: [], 3: []}
# dic[1].append('袁姐')
# print(dic)
# dic[2].extend('二哥')
# print(dic)
4,
# l1 = []
# l2 = l1
# l3 = l1
# l3.append('a') #使用了append方法,所有变量的值都会变
# print(l1,l2,l3)
5,
#元祖 如果元祖里面只有一个元素且不加,那此元素是什么类型,就是什么类型。
# tu1 = (1)
# tu2 = (1,)
# print(tu1,type(tu1))
# print(tu2,type(tu2))
6,集合
'''
集合:可变的数据类型,他里面的元素必须是不可变的数据类型,无序,不重复。
{}
元素必须是可迭代
'''
# set1 = set({1,2,3})
# set1 = {'alex','wusir','ritian','egon','barry',}
#增
# set1.add('女神')
# print(set1)
# set1.update('abc') #迭代增加
# print(set1)
#删除
# set1.pop() # 随机删除,有返回值
# set1.remove('alex') # 按元素删,如元素不存在会报错
#{} set()
# set1.clear()
# print(set1) # set()
# del set1
# print(set1)
#查
# for i in set1:
# print(i)
交集
# set1 = {1,2,3,4,5}
# set2 = {4,5,6,7,8}
# set3 = set1 & set2
# print(set3) # {4, 5}
# print(set1.intersection(set2)) # {4, 5}
并集
# set1 = {1,2,3,4,5}
# set2 = {4,5,6,7,8}
# print(set1 | set2) # {1, 2, 3, 4, 5, 6, 7,8}
# print(set2.union(set1)) # {1, 2, 3, 4, 5, 6, 7}
反交集
# set1 = {1,2,3,4,5}
# set2 = {4,5,6,7,8}
# print(set1 ^ set2) # {1, 2, 3, 6, 7, 8}
# print(set1.symmetric_difference(set2)) # {1, 2, 3, 6, 7, 8}
差集
# set1 = {1,2,3,4,5}
# set2 = {4,5,6,7,8}
# print(set1 - set2) # {1, 2, 3}
# #找set1独有的元素
# print(set1.difference(set2)) # {1, 2, 3}
子集和超集
# set1 = {1,2,3,}
# set2 = {1,2,3,4,5,6}
#
# print(set1 < set2)
# print(set1.issubset(set2)) # 这两个相同,都是说明set1是set2子集。
# print(set2 > set1)
# print(set2.issuperset(set1)) # 这两个相同,都是说明set2是set1超集。
#去重
# li = [1,2,33,33,2,1,4,5,6,6]
# set1 = set(li)
# # print(set1)
# li = list(set1)
# print(li)
# s1 = {1,2,3}
# print(s1,type(s1))
# s = frozenset('barry')
# print(s,type(s))
# for i in s:
# print(i)
7,list的深浅拷贝
1、浅拷贝只能拷贝list的最外层,修改内层则原列表和新列表都会变化。
2、深拷贝是指将原列表完全克隆一份新的
用于list之间赋值后,一个list改变,不会影响另一个list
# 赋值运算
# l1 = [1,2,3]
# l2 = l1
# l1.append('a')
# print(l1,l2)
#copy
# l1 = [1,2,3]
# l2 = l1.copy() #浅拷贝
# print(l1,l2)
# print(id(l1),id(l2))
# l2.append('a')
# print(l1,l2)
import copy
# l1 = [1,2,[4,5,6],3]
# l2 = copy.deepcopy(l1) #深拷贝
# print(l1,id(l1))
# print(l2,id(l2))
# l1[2].append('a')
# print(l1,l2)
# l1 = [1,2,[4,5,6],3]
# l2 = l1[:]
# l1[2].append('a') #嵌套的LIST的内存地址是一样的,外层的内存地址不一样
# print(l1,l2)
# print(id(l1[2]),id(l2[2]))
# print(id(l1),id(l2))
# li = ['alex','taibai','wusir','egon']
# for i in li:
# print(li.index(i),i)
# for index,i in enumerate(li,1): #对对象进行枚举,下标从1开始,默认下标0
# print(index,i)