python 谈谈可变对象与不可变对象

前言:

先说说本文中可能使用到的方法吧,也是常用的!

id(): 返回变量的内存地址;

type():返回变量的类型;

==:变量的比较(侧重于值);

is : 变量的比较(侧重于内存);

 

本文可能涉及到内存。可以去看看我的以前写的垃圾文章,或许对您有帮助。

https://blog.csdn.net/fm345689/article/details/88385963

 

(⊙v⊙)嗯,那开始吧!

 

可变对象与不可变对象的区别在于对象本身是否可变。------- 抄写别人的!!

 

以下是个人理解,不管对不对,反正都说了。别打脸打头。

 

可变对象:对象所指内存中的参数可以修改。如 list、dict、set.....

不可变对象:对象所指内存中的参数无法修改,当要修改该变量时,重新开辟内存空间。如:string、number、tuple.....

 

可变对象:

 

不可变对象:

 

上面的图解释不清晰,很狭义,

这里有个问题,与number类型一样,当list 指向另一个list 时,list内存也会改变,上面的就不好作解释了。

哈哈。。。、、、给自己挖个坑!!!!

那就再来一次。。。 说说 string、tuple。

string:

tuple:

 

总结一下吧,

  1. 可变与不可变,就是我们所说的对象中的参数一但创建后,里面的值是否可以修改;
  2. 当修改对象的值时,对象的值改变,内存地址没有改变,说明是可变对象;
  3. 当修改对象的值时,对象的值改变,内存地址发生改变,说明是不可变对象。

 

另外留个题目:

在dict中,string、number、tuple、list、set、dict,那些可以作为dict的key值?为什么?

自己先想想,答案在下面!!!

|

|

|

|

|

|

|

|

|

|

|

|

|

|

答案解释:

在dict中,我们都知道它是由key:value 组成,查询数据时,可能通过key-->value,不能value-->key,也就是说key的值应该是固定的,不能作修改,假如可以修改,如{"123":123},修改为{"321":123},那么我在查找key为'123'时,就无法找到。不符合定义,所以key是属于不可变对象。
那么得出:list,set,dict 是不可以作为key的。因为它们可以改变值,当改变是,数据将无法定位!

 

不知说的对不对,反正已经写了,道友们有什么想说的欢迎留言,互相学习!!!

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值