python集合深浅copy

01昨天内容回顾

 代码块:由一个文件,一个函数,一个模块,一个类,交互模式下每一行都是一个代码块

Is == id:id()是查询内存地址,==比较两边的值,is是比较两边的内存地址。

小数据池:

在内存中创建一个池,提前存放了-5~256的整数,一定规则的字符串,后续程序中,如果设置的变量指向的是小数据内容,那就不会再内存中重新创建。

1.节省内存

2.提高性能和效率。

小数据池和代码块的关系。

同一个代码块:python在执行时,遇到了初始化对象,他会将这个变量和数值放在一个字典中,再次遇到他会从这字典中寻找。

不同代码块:python执行中,直接从小数据池中寻找。满足条件id相同。

编码:

Str》bytes:encode

Bytes》str:decode

 

 

 

 

02作业讲解

 

 

 

 

 

 

03 基础数据类型补充

元祖:如果元祖中只有一个数据,且没有逗号,则还‘元祖‘与里面的数据的数据类型相同。Print()将会得到是属于元素的类型 ,得到的不是元祖。

Tu1=(1)

Print(tu1)得到的是元素

Tu1=(1,)

Tu2=(‘alex’,)

Tu3=(【1,2,3】,)

 

列表,元组,字符串互相转换

列表和元组转换为字符串则必须依靠join函数

 

列表:列表和列表可以相加

L1=【1,2,3】

L2=【‘alex’,‘wusir’】

L3=l1+l3

Print()

 

在循环一个列表时,如果对列表中的某些元素进行删除,

那么次元素后面的所有元素就会前进一位,他们索引位置 就会变,所以不能在循环的时候,进行增删

Eg:# for i in range(len(li)-1,-1,-1):
#     if i %2==1:
#         li.pop(i)
# print(li)

 

 

字典

Dic1=dic.fromkeys([1,2,3],’alex’)

Print(dic1)

 

在循环一个字典时,不能改变字典的大小(就是不能增减)。

 

数据类型的转换。

Int str bool 转换

Str《》types

Str《》list:字符串转换列表时用split,而list转换为字符串时,必须list全是字符串。

 

 

 

04集合set

增:有add。update#update:迭代着增加
set1.update('A')print(set1)
set1.update('老师')print(set1)
set1.update([1,2,3])print(set1)

删:

set1 = {'alex','wusir','ritian','egon','barry'}
 
set1.remove('alex')  # 删除一个元素print(set1)
 
set1.pop()  # 随机删除一个元素print(set1)
 
set1.clear()  # 清空集合print(set1)
del set1  # 删除集合print(set1)

 

 

 

Set:

{‘name’,‘alex’,1,2,3}

集合要求里面的元素必须是不可变的数据类型,但本身是可以变得,集合里面的元素不重复,无序。

主要用途:

  1. 去重,
  2. 关系测试。

List去重

li=[1,2,2,3,4,6,1,3,]
# set1=set(li)
# li=list(set1)
# # print(set1)
# print(li)
集合比如#
 set1=set({1,2,3})
# set2=set1
# print(id(set1),id(set2))
地址是不一样的。
 
 
 
  1. 关系测试

交集&intersection

并集|union

差集—difference

反交集^ 或者 symmetric_difference

子集和超集

 

05   浅度copy

 

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

 

l1 = [1,2,3,['barry','alex']]

l2 = l1.copy()

print(l1,id(l1))  # [1, 2, 3, ['barry', 'alex']] 2380296895816

print(l2,id(l2))  # [1, 2, 3, ['barry', 'alex']] 2380296895048

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

 l1[3][0] = 'wusir'

print(l1,id(l1[3]))  # [1, 2, 3, ['wusir', 'alex']] 1732315659016

print(l2,id(l2[3]))  # [1, 2, 3, ['wusir', 'alex']] 1732315659016

 

 

05 深度copy

对于深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

posted @ 2018-08-21 17:27  i峥嵘岁月  阅读(153)  评论(0编辑  收藏  举报