Python之可变序列和不可变序列

Python:可变序列和不可变序列

​ 可变序列:列表、集合、字典

​ 不可变序列:元组、字符串

​ 可变和不可变是指:内存中存储的值是否是可变的

案例一:列表和字符串

s1 = "1234"
ls = [1,2,3,4]
#输出变量的地址
print(id(s1),id(ls))
#修改字符串和列表
s1.replace("1","10")
ls.append(10)
#输出变量的地址
print(id(s1),id(ls))
#虽然变量的地址没有改变,但是输出变量
#s1的内容没有改变,但是ls改变了
print(s1,ls)
s2 = s1.replace("1","10")
#s2是替换后的变量,并且s2的地址不再是s1,所以
#s1的内容没有变化,而是新开辟了空间用于存放变化后的字符串
print(s2,id(s2),s1)

案例二:集合和字典

st1 = (1,2,3,4,5)
st2 = (6,7,8)
dt = {1,2,3,4,5}
#输出变量地址
print(id(st1),id(dt))
#修改变量
dt.pop()
st1 += (1,2)
#输出地址变量,元组地址改变,集合地址不改变
print(id(st1),id(dt))

结论:不可变序列在内存中是不会改变的,如果对不可变序列做出改变,会将该序列存储在新的地址空间中,而原来的序列因为垃圾回收机制,会被回收。可变序列发生改变时,是不会改变地址的,而是改变内存中的值,或者是扩展内存空间。

另:字典

字典是一个可变序列,但是字典的键是不可变的,而值是可变的,为什么字典的键是不可变的,因为,字典这种数据结构的原理是伪随机探测的散列表,它的查找方式是将键通过哈希函数,哈希出一个值,然后在内存中查找这个值,所以哈希后的值一般是唯一的或是冲突比较小的。如果改变键的值,那么哈希后的值就会发生变化,导致找不到原来的值,所以键的值是不可变的。键哈希后指向的是内存中的地址,内存中的数据发生变化不影响字典的查找。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值