可变对象和不可变对象🤔
更多代码: Gitee主页:https://gitee.com/GZHzzz
博客主页: CSDN:https://blog.csdn.net/gzhzzaa
0 写在前面
- 复习一下python 基础数据结构,大家一起多多交流,互相学习啊!😊
- Python在heap(堆:程序员自己分配释放)中分配的对象分成两类:可变对象和不可变对象。所谓可变对象是指,对象的
内容
可变,而不可变对象是指对象内容不可变 python中,万物皆对象
1 不可变对象
- 不 可 变 ( i m m u t a b l e ) 不可变(immutable) 不可变(immutable):int、字符串(string)、float、(数值型number)、元组(tuple)
1.1 示例一
i = 73
i += 2
内容变化
需要分配新的内存空间,因为原来的对象内容不可变。- 从上图可知,不可变对象创建了新对象,改变了变量的对象引用。
1.2 示例二
x = 1
y = 1
x = 1
x is y
'True'
y is z
'True'
-
如上所示,因为整数为不可变,x,y,z在内存中均指向一个值为1的
内存地址
,也就是说,x,y,z均指向的是同一个地址,值得注意的是,整形来说,目前仅支持(-1,100)。 -
总结一下,不可变对象的优缺点。
- 优点是,这样可以
减少重复
的值对内存空间的占用。 - 缺点呢,我要修改这个变量绑定的值,如果内存中没用存在该值的内存块,那么
必须重新开辟
一块内存,把新地址与变量名绑定。而不是修改变量原来指向的内存块的值,这回给执行效率
带来一定的降低。
2 可变对象
- 可 变 ( m u t a b l e ) 可变(mutable) 可变(mutable):字典型(dictionary)、列表型(list)
2.1 示例
其对象的内容是可以变化的。当对象的内容发生变化时,变量的对象引用是不会变化的
m=[5,9]
m+=[6]
二、函数参数:
Python函数参数对于可变对象,函数内对参数的改变会影响到原始对象;对于不可变对象,函数内对参数的改变不会影响到原始参数。原因在于:
-
可变对象,参数改变的是可变对象,其内容可以被修改
-
不可变对象,改变的是函数内变量的指向对象
3 i s is is 与 = = == == 的联系区别
3.1 python中的is机制
-
i
s
is
is 是用于判断两个变量的
引用对象
是否相同,也就是说a is b等价于 i d ( a ) = = i d ( b ) id(a)==id(b) id(a)==id(b),引用对象相同,地址是相同的
#示例1
a=1
b=1
print(a is b)#True
a=1.1
b=1.1
print(a is b)
#True
a=[1]
b=[1]
print(a is b)
#a,b为可变对象
#False
- python 为了性能考虑,对于值相同的不可变对象,都不会重新创建新的地址来存储对象,而对于可变对象,则会重新开辟空间( i d 不 一 样 id不一样 id不一样)
3.2 python中的==机制
- == 则是判断两个对象的
值
是否相等(更常用),不管两个变量的引用对象是否相同
#示例3
a=1
b=1
print(a==b)
#True
a=[1]
b=[1]
print(a==b)
#True
写在最后
十年磨剑,与君共勉!
更多代码:Gitee主页:https://gitee.com/GZHzzz
博客主页:CSDN:https://blog.csdn.net/gzhzzaa
- Fighting!😎
基于pytorch的经典模型:基于pytorch的典型智能体模型
强化学习经典论文:强化学习经典论文
while True:
Go life