七、数据类型的补充 集合 深浅copy

简介: 元祖 对于元祖 如果一个元祖只有一个元素的时候,在元祖里面要加逗号,如果不加 此元素是什么数据类型该表达式就是这么数据类型 tu = (9)  tu 的数据类型为int tu = (9,)  tu的数据类型为tuple tu([2,3,4]) tu的数据类型为list 列表 在循环一个列表时,最好不要进行删除的动作(一旦删除,索引会随之改变),容易出错。

元祖

对于元祖 如果一个元祖只有一个元素的时候,在元祖里面要加逗号,如果不加 此元素是什么数据类型该表达式就是这么数据类型

tu = (9)  tu 的数据类型为int

tu = (9,)  tu的数据类型为tuple

tu([2,3,4]) tu的数据类型为list

列表

在循环一个列表时,最好不要进行删除的动作(一旦删除,索引会随之改变),容易出错。
# li = [11,22,33,44,55]
# 将索引为奇数的元素删除。
# del li[1::2]                                      方法一
# print(li)





# l1 = []
# for i in range(len(li)):
#     if i % 2 == 0:                             方法二
#         l1.append(li[i])
# li = l1
# print(li)

 l1 = []
# for i in li:
#     if li.index(i) % 2 == 0:
#         l1.append(i)
# li = l1
# print(li)                                          方法三

 

上面的方法都有一个共性就是把满足要求的元素找出来 放在一个新的列表中 然后再打印新列表 

字典

 

dic = {}
dic = dic.fromkeys('abc',[])
print(dic)
dic = dic.fromkeys('abc','alex')
print(dic)
#{'a': [], 'b': [], 'c': []}
#{'a': 'alex', 'b': 'alex', 'c': 'alex'}

 

dic = {'k1':'value1','k2':'value2','name':'wusir'}
# 将字典中含有k元素的键,对应的键值对删除。

# 在循环字典中,不能增加或者删除此字典的键值对。
# dictionary changed size during iteration

 l1 = []
 for i in dic:
     if 'k' in i:
        l1.append(i)                        
for i in l1:
    del dic[i]
 print(dic)
重点就是创建空列表把符合要求的key放到空列表中  然后循环列表 通过列表的元素去找字典中的key  value  
    

 

 数据转换

tuple  转化为list   

 

list = [0,12,3,4]   tu = (0,12,3,4)
tu = print(tuple(list))
list = print(list(tu))
#(0,12,3,4)
#[0,12,3,4]  

 

 

 

 tuple 转为为str

转化条件和list一样的 要求所有的元素都为字符串

tuple = ('1','2','3')
s = '*'.join(tuple)
print(s)
#1*2*3

集合 不重复,无序,它里面的元素是可哈希的。他本是是不可哈希,他不能作为字典的key。

 

集合自带去重功能  如果一个列表或者元祖中有重复的元素   如果元素全是int  那么是有序排列的 从小到大
list = [2,3,4,4,5]
print(set(list))
tuple = (2,3,4,4,5)
print(set(tuple))
#{2, 3, 4, 5}
#{2, 3, 4, 5}

 

集合的增
add 
se = {2,3,5,4}
se.add('a')
print(se)
#{2,3,'a',5,45}
update  增加的元素必须为可迭代对象  数字不能迭代
se.uppdate('abc')
print(se)
#{'b', 2, 3, 5, 'a', 'c', 45}
  

 

se = {'b', 2, 3, 5, 'a', 'c', 45}
se.pop()
print(se)   随机删除集合中的某一个元素  如果集合中的元素全是int那么就是删除最后一个
se.clear()  删除集合中的所有元素   
print(se) #se()
del  se       删除集合  print  会报错        

set1 = {2,3,4,5,6}
set2 = {9,3,4,5,7}
print(set1 & set2)        交集
print(set1 | set2)        并集
print(set1 ^ set2)        反交集
print(set1  -  set2)      差集
print(set2  -  set1)     差集

  

set1 = {3,4,5,}
set2 = {9,3,4,5,7}
print(set1.issubset(set2))   判断set1是否为set2的子集    同为 print(set1<set2)
print(set2.isdisjoint(set1))   判断两个集合的交集是否为空
print(set2.issuperset(set1)) 判断set2是否为set1的超集    同为 print(set2>set1)
#True
#False
#True

 

set1 = {3,4,5,}
set2 = {9,3,4,5,7}
set3 = frozenset(set1)
print(type(set3))
<class 'frozenset'>  改变可数据类型 变成frozenset数据类型   该数据类型特征为不能更改
                               为可哈西类型   可哈类型可以作为字典的key

 copy

赋值运算

l1 = [1,2,3]
l2 = l1
l2.append(111)
print(l1,l2)
print(id(l1))
print(id(l2))
#[1, 2, 3, 111] [1, 2, 3, 111]
#1861092202312
#1861092202312
对于赋值运算   不管是什么数据类型他的内存地址是一样的  所以要改都改

copy的浅copy

#copy 不是指向一个,在内存中开辟了一个内存空间
#对于浅copy来说,第一层创建的是新的内存地址,
# 而从第二层开始,指向的都是同一个内存地址,
# 所以,对于第二层以及更深的层数来说,保持一致性。
l1 = [1,2,3]
l2 = l1.copy()
print(id(l1),id(l2))
#2123185674056 2123184810312
l1 = [1,2,3,[3,4,5]]
l2 = l1.copy()
l1[1] = "x"
l1[3].append(7)
print(l1,l2)
print(id(l1[3]),id(l2[3]))
#[1, 'x', 3, [3, 4, 5, 7]] [1, 2, 3, [3, 4, 5, 7]]
第一层创建的是新内存所以不跟随改变 第二层以后都是统一内 存地址  所以都会发生改变 
 # 2909381154632 2909381154632    第二层的内存地址相同

copy的深copy

deep.copy
对于深copy来说,两个是完全独立的,
改变任意一个的任何元素(无论多少层),另一个绝对不改变.
import copy
l1 = [1,2,3,[3,4,5]]
l2 = copy.deepcopy(l1)
print(l2)
print(id(l1[3]),id(l2[3]))
#[1, 2, 3, [3, 4, 5]]
#2442720707976 2442720709384    内存地址不一样

 

 

  

 

目录
相关文章
|
20天前
|
索引 Python 容器
为什么Python中会有集合set类型?
为什么Python中会有集合set类型?
|
3月前
|
存储 Java 索引
JavaSE——集合框架一(5/7)-Set系列集合:Set集合的特点、底层原理、哈希表、去重复原理
JavaSE——集合框架一(5/7)-Set系列集合:Set集合的特点、底层原理、哈希表、去重复原理
41 1
|
4月前
|
存储 开发框架 .NET
C#学习相关系列之数据类型---Diactionary字典的用法
C#学习相关系列之数据类型---Diactionary字典的用法
|
JSON Java 数据格式
Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例)(一)
Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例)(一)
187 0
Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例)(一)
|
Java
Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例)(二)
Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例)(二)
141 0
Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例)(二)
|
Java
Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例)(三)
Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例)(三)
102 0
|
前端开发 数据安全/隐私保护 Python
Python 编程骚操作连载(一)- 字符串、列表、字典和集合的处理(Part B)
Python 编程骚操作连载(一)- 字符串、列表、字典和集合的处理(Part B)
Python 编程骚操作连载(一)- 字符串、列表、字典和集合的处理(Part B)
Python 编程骚操作连载(一)- 字符串、列表、字典和集合的处理(Part A)
Python 编程骚操作连载(一)- 字符串、列表、字典和集合的处理(Part A)
Python 编程骚操作连载(一)- 字符串、列表、字典和集合的处理(Part A)
Python 编程骚操作连载(一)- 字符串、列表、字典和集合的处理(Part C)
Python 编程骚操作连载(一)- 字符串、列表、字典和集合的处理(Part C)
Python 编程骚操作连载(一)- 字符串、列表、字典和集合的处理(Part C)
|
存储 NoSQL Redis
数据类型-sorted_set 类型介绍与基本操作 | 学习笔记
快速学习数据类型-sorted_set 类型介绍与基本操作
数据类型-sorted_set 类型介绍与基本操作 | 学习笔记