前言:
先说说本文中可能使用到的方法吧,也是常用的!
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:
总结一下吧,
- 可变与不可变,就是我们所说的对象中的参数一但创建后,里面的值是否可以修改;
- 当修改对象的值时,对象的值改变,内存地址没有改变,说明是可变对象;
- 当修改对象的值时,对象的值改变,内存地址发生改变,说明是不可变对象。
另外留个题目:
在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的。因为它们可以改变值,当改变是,数据将无法定位!
不知说的对不对,反正已经写了,道友们有什么想说的欢迎留言,互相学习!!!