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)

 

posted @ 2018-11-21 21:14  烟云过眼  阅读(98)  评论(0编辑  收藏  举报