python 中的 set 放入带 list 的 tuple 的一点疑问 和理解

1. list 是一种有序的集合,可以随时添加和删除其中的元素

2.tuple也是 是一种有序的集合 , 和list非常类似 ,但是tuple一旦初始化就不能修改,他没有append,insert,pop等方法

3.set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key

4.Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。

#定义元组
yz = (1, 2)
#定义set
s = set([1, 2, yz])
print s : {(1, 2), 1, 2}

课件 set 放入tuple是可以的, 但是如果将 yz 改为 如下,再运行就会报错

yz = (1, 2,[3,4])
SyntaxError: invalid syntax

下面写下自己的理解:

1. tuple 是 不可变数据类型, 这里 的不可变 指的是 指向不可变, 最经典的莫过于下面这个了

a = 1
b = 2
yz = (a, b, [3,4])
print("id(yz) : ",id(yz))
yz[2].append(5)
print("id(yz) : ",id(yz))
print("print yz :",yz)

#输出结果
id(yz) :  7500144
id(yz) :  7500144
print yz : (1, 2, [3, 4, 5])

id() 是输出对象的 内存地址

可见yz的地址并没有改变, tuple所谓的“不变”是说,tuple的每个元素指向永远不变 ,但是 如果是放入可变类型的话,值(value)是可变的。

我们可以认为 :

第三句话 是向内存中申请了一块地址 (编号:7500144),这块地址的组成由三块地址组成(xxx1 , xxxx2, xxxxxL)

执行 第五句话时,xxxxxL内存地址并没有变,只是这个地址的长度有了变化,它还是原来的那个地址

字符串和数字类似

我们尝试改变a,b 的值

a = 3
b = 4
print("print yz :",yz)
#输出结果
print yz : (1, 2, [3, 4, 5])

我们并没有改变 yz 的值,因为我们改变a,b的值仅仅重新申请了两块地址 xxx3 , xxxx4,,复制给了a,b, 但 xxx1 , xxxx2,本身没有改变

我们可以在读一下tuple 的定义 :

    “tuple一旦初始化就不能修改” ==  tuple一旦初始化 元素地址不可变,但是值(对象)可变,

理解了 tuple ,再来看 set 就很好理解,

set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”

放入set的必须是值(对象)不可变,那么放入 可变对象(list)后的 tuple , 就不是完整的不可变对象了,

除非 tuple 是完整的(里面的数据类型仅包括字符串,数字,元组)才可以放入,set中 ;

作为一个初学者,如有说的不对的地方,请指出,非常谢谢 !

参考 :

廖雪峰的官方网站 python 课程

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/u/2322277/blog/2051426

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值