欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python 深浅拷贝&集合

程序员文章站 2022-03-26 11:13:27
一、深浅拷贝 1.浅拷贝,只会拷贝第一层 >>> [1, 'ss', '小可爱'] >>> [[1, 3], 'ss', '小可爱'][[1, 3], 'ss', '小可爱'] 2.深拷贝 = 克隆一份 >>> 二、集合: 把不同的元素集合到一起,组成集合的成员不可重复如果有重复的元素保留一个 主要 ......

一、深浅拷贝

1.浅拷贝,只会拷贝第一层

s = [1, 'ss', '小可爱']
s1 = s.copy()
print(s1)

>>>

[1, 'ss', '小可爱']

 

s = [1, 'ss', '小可爱']
s1 = s.copy()
s1[0] = 3  #修改s1的值
print(s1)
>>>
[3, 'ss', '小可爱']
 
#浅拷贝,只会拷贝第一层,修改完s1里面列表的值后,数据源也会改变
s = [[1, 2], 'ss', '小可爱']
s1 = s.copy()
s1[0][1] = 3  #修改s1的值
print(s1)
print(s)

>>>

[[1, 3], 'ss', '小可爱']
[[1, 3], 'ss', '小可爱']

 

2.深拷贝 = 克隆一份

import copy

s = [[1, 2], 'ss', '小可爱']

s1 = copy.deepcopy(s)
s1[0][1] = 3  #修改s1的值

print(s)
print(s1)

>>>

[[1, 2], 'ss', '小可爱']
[[1, 3], 'ss', '小可爱']
 

二、集合:

    把不同的元素集合到一起,组成集合的成员不可重复如果有重复的元素保留一个

  主要作用:

          1.去重,把一个列表变成集合就自动去重了;

             2.关系测试,交集、并集等关系

    集合的创建:

       a = set('xiaoss baby')

       print(a)    # 输出:{'a', 'y', 'b', 'o', 'x', ' ', 'i', 's'}

  分类:可变集合、不可变集合

          可变集合(set):可添加和删除元素,非可哈希的,不能做字典的键和其他集合的元素

          不可变集合(frozenset):与上相反

  基本操作:

li = ['xiao', 2, 5]
s = set(li)

s.add('baby') #添加一个元素
print(s)

s.update('ops') # 把要添加的字符串作为一个单独的序列加到集合里
print(s)

>>>

{2, 'xiao', 'baby', 5}
{2, 5, 'o', 'baby', 'p', 'xiao', 's'}
 
li = ['xiao', 2, 5]
s = set(li)

s.update('ooo') # 重复的字符只添加一个到集合里
print(s)

>>>

{'o', 2, 'xiao', 5}
 
li = ['xiao', 2, 5]
s = set(li)

s.update([12, 'baby']) # 添加多个元素要放到一个容器里
print(s)

>>>

{2, 5, 'baby', 12, 'xiao'}
 
#删除操作
li = ['xi', 2, 5]
s = set(li)
# 删除
s.remove(2) # ()里存放要删除的内容
s.pop()  # 随机删除一个
s.clear()  # 清空
del s  #  直接删除整个集合
print(s)

>>>

print(set('qwer') == set('qwereq')) 
# true 因为两者形成的集合结果一样,所以等价

print(set('qwer') < set('qwerty'))
#true   < 表示后者包含前者

>>>

true
true
 
# 联合操作
print(set('qwer') or set('qwerty'))  # 取两者共同的
print(set('qwer') and set('qwerty')) # 取两者包含的所有序列元素

>>>

{'w', 'e', 'q', 'r'}
{'w', 'y', 'r', 't', 'e', 'q'}
 
a = set([1, 2, 3, 4, 5])
b = set([3, 4, 5, 6, 7])

# intersection()   交集
print(a.intersection(b))
print(a & b)  #同上

#union  并集
print(a.union(b))
print(a | b)   #同上

# 差集(互相不在对方里面)
print(a.difference(b)) # 在a不在b 或print(a - b)
print(b.difference(a)) # 在b不在a 或print(b - a)

# 反向交集
print(a.symmetric_difference(b))

# 父集  
print(a.issuperset(b))  # 判断a是否完全包含于b

# 子集
print(a.issubset(b))

>>>

{3, 4, 5}
{3, 4, 5}
{1, 2, 3, 4, 5, 6, 7}
{1, 2, 3, 4, 5, 6, 7}
{1, 2}
{6, 7}
{1, 2, 6, 7}
false
false