python--知识小结和集合

知识小结

一、

= 表示赋值
==表示比较值的大小
is 比较内存地址

二、

数字小数据池:在-5~256之内,id在电脑里是一样的
字符串id一样要求:
①:不能有特殊字符
②:s(一个单字符)*20以内的数字,id是一样的,乘以20以后的数字则id不一样了
剩余的如dict, list ,元祖,tuple,set 没有小数据池

三、

各个编码之间的二进制不能相互转换,会产生乱码
文件的存储,传输,不能用unicode,只能用utf-8  gbk   ascii utf-16

四、

bytes的类型,都是在py3的大环境中
对英文:str:  表现形式:a='alex'                      
             中文:表现形式:a=b'alex'        
                                 编码形式:utf-8   gbk
对中文:str:  表现形式:a='中国'       
                                 编码形式:unicode
             中文:表现形式:a=b'xe23e24e25e26e27e28'     三个字节表示一个中文
                                 编码形式:utf-8   gbk

例子:

encode   编码  str---->bytes
s1='alex'
s11=s1.encode(utf-8)
print(sii)
输出:b'alex'

五、集合

集合是可变数据类型,元素无序,去重的。但是集合里面的元素必须是不可变的数据类型。

1:集合的创建,两种方式

set1 = set({1,2,'barry'})
   set2={'1','2','barry'}

2:集合的增:

add,直接添加
set={'1','2','barry'}
set.add('66')
print(set)       #{1, 2, 'barry', '66'}

update   迭代添加,会自动去除重复

set.update('66')            #{1, 2, 'barry', '6'}

3:集合的删:

set= set({1,2,'barry'})
1.pop
set.pop()   随机删除,有返回值
2.remove
set.remove(‘1’)  删除元素   # {2,'barry'}
3.clear()
set.clear() #清空集合
4.del
del set   删除集合 

3:集合没有改,因为集合里的元素是不可变数据类型

4:集合的查:

set1 = set({1,2,'barry'})
for i  in  set1:
     print(i)

5.两个集合的操作

5.1 交集。(&  或者 intersection)

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
1:&
set3=set1&set2
print(set3)     #{4, 5}
2:intersection
set3=set1.intersection(set2)     #{4, 5}
交集

5.2 并集。(| 或者 union)

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
set3=set1|set2
print(set3)    #{1, 2, 3, 4, 5, 6, 7, 8}
set3=set1.union(set2)
print(set3)    #{1, 2, 3, 4, 5, 6, 7, 8}
并集

5.3 反交集。

 (^ 或者 symmetric_difference)
1:^
set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1^set2)        #{1, 2, 3, 6, 7, 8}
2:symmetric_difference
print(set1.symmetric_difference(set2))     #{1, 2, 3, 6, 7, 8}
反集合

5.4 子集与超集。

1.子集
set1 = {1,2,3,4,5}
set2 = {1,2,3,4,5,6}
print(set1<set2)     #true      set1是set2    子集

2.超集
print(set2>set1)    #true        set2是set2超集
子集与超集
冻结的set:frozenset

5.5差集。(- 或者 difference)

1.-
set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1-set2)   #{1, 2, 3}
print(set2-set1)    #{8, 6, 7}
2:difference 
print(set1.difference(set2))      #{1, 2, 3}
print(set2.difference(set1))      #{8, 6, 7}
差集

六、浅copy

6.1赋值运算:对于赋值运算来说,l1与l2指向的是同一个内存地址,所以他们是完全一样的。

总结:l1=l2 不管怎么变化都是同时变,保持一致。
l1 = [1,2,3,['barry','alex']]
l2 = l1    #赋值后 l1和l2是一样的
print(l1,l2)   # 值一样   [1, 2, 3, ['barry', 'alex']] 
                                  [1, 2, 3, ['barry', 'alex']]
print(id(l1),id(l2))     # id一样    28808496    28808496  
#l1进行修改后再打印
l1[0] = 111
print(l1,id(l1),l2,id(l2))   #l1和l2同时变化,并且id也是同时变化的
                                  # [111, 2, 3, ['barry', 'alex']] 28808496 
                                     [111, 2, 3, ['barry', 'alex']] 28808496
l1[3][0]='云哥'   #改变嵌套的内容,l1=l2仍然同时变,保持一致。
print(l1,id(l1),l2,id(l2))    
                                       #[111, 2, 3, ['云哥', 'alex']] 28939568
                                          [111, 2, 3, ['云哥', 'alex']] 28939568
赋值运算 

6.2浅拷贝copy。

对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。

l1 = [1,2,3,['barry','alex']]
l2=l1.copy()     #l1与l2地址不一样
print(l2,id(l2),l1,id(l1))    #l2:[1, 2, 3, ['barry', 'alex']] 7821432
                                     #l1: [1, 2, 3, ['barry', 'alex']] 7836976

l2.append('4')                    #总结:l2改变第一层变化,不影响l1
print(l2,id(l2),l1,id(l1))  #l2:[1, 2, 3, '4', ['barry', 'alex']] 28661880
                                   # l1:[1, 2, 3, ['barry', 'alex']] 28677424

l2[3][0]='云哥'                #总结:l2改变第二层(被嵌套的不分)变化,l1进行同步变化
print(l2,id(l2),l1,id(l1))    #l2:[1, 2, 3, ['云哥', 'alex']] 28792952
                                     # l1:[1, 2, 3, ['云哥', 'alex']] 28808496
浅copy

6.3,深拷贝deepcopy     

对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。

import copy
l1 = [1,2,3,['barry','alex']]
l2 = copy.deepcopy(l1)

print(l1,id(l1))  # [1, 2, 3, ['barry', 'alex']] 2915377167816
print(l2,id(l2))  # [1, 2, 3, ['barry', 'alex']] 2915377167048

l1[1] = 222
print(l1,id(l1))  # [1, 222, 3, ['barry', 'alex']] 2915377167816
print(l2,id(l2))  # [1, 2, 3, ['barry', 'alex']] 2915377167048

l1[3][0] = 'wusir'
print(l1,id(l1[3]))  # [1, 222, 3, ['wusir', 'alex']] 2915377167240
print(l2,id(l2[3]))  # [1, 2, 3, ['barry', 'alex']] 2915377167304     
deepcope
原文地址:https://www.cnblogs.com/zzy-9318/p/8082068.html