python 中集合的update()

一般来说集合中添加函数update(),括号里面是个集合,就像如下这样:

set1 = {1,2,3}
dict1 = {'name':"BGWAN",'age':22}
set1.update(dict1)
print(set1)#{1, 2, 3, 'name', 'age'}
set2 = {4,5,6}
set3 = {5,6,7,'890'}
set2.update(set3)
print(set2)#{'890', 4, 5, 6, 7}

builtins.py中对update的解释是:Update a set with the union of itself and others. 即使用自身集合与其他集合更新,就是说里面应该是集合或者字典类型。但是当括号内的元素不是字典或集合时会出现什么情况呢?

set1 = {1,2,3}
str1 = '345'
set1.update(str1)
print(set1)
#这里结果是{1, 2, 3, '4', '3', '5'}
set2 = {1,2,3}
tup1 = (4,5,6)
set2.update(tup1)
print(set2)
#这里结果是{1, 2, 3, 4, 5, 6}
set3 = {1,2,3}
list1 = [2,3,4]
set3.update(list1)
print(set3)
#这里结果是{1, 2, 3, 4}

这里我们想到一个函数set(),将元素强制集合化,即先将字符串、元组、列表转化成了集合,然后再进行添加更新。要注意的是:非集合元素内容必须是可迭代类型,‘int’类型就不可以,将1放进括号内就会报错。
我们再往深里想,若像列表内又嵌套了列表或集合或元组等类型时会怎么样呢?

set1 = {1,2,3}
list2 = [1,2,(7,9)]
set1.update(list2)
print(set1)

这里会将(7,9)分解输出吗?答案是否。结果是{1, 2, 3, (7, 9)},里面嵌套的内容会原样输出并添加到集合中,但完全是这样吗?我们看个例子:

set = {1,2,3}
list = [[6,5],[9,7]]
set.update(list)
print(set)

这里结果会报错,TypeError: unhashable type:list,类型错误,不可拆卸类型,也叫不可哈希。出现这种异常是因为在使用set()过程中,set()传递进来的是不可哈希的元素,而列表嵌套内部由于不分解,要被当做集合内的元素,必须是可哈希的,我们知道,在集合的定义中,set中的元素是不重复的,无序的,里面的元素必须是可哈希的,即不可变的(int,str,tuple,bool)
可哈希的元素有:int、float、str、tuple
不可哈希的元素有:list、set、dict,那么里面嵌套的类型不能是这三种
为什么列表是不可哈希的,而 元组是可哈希的:
(1)因为 list 是可变的,可以在任意改变其内的元素值。
(2)元素可不可哈希,决定是否使用 hash值 进行索引
(3)列表不使用 hash 进行元素的索引,自然它对存储的元素没有可哈希的要求;而 se集合使用 hash 值进行索引。
什么是hash值,可以自行百度

  • 18
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值