python 的不可变对象
在python中一切皆对象。在Python中不存在所谓的值传递调用,一切传递都是对象的引用,也可认为是传址。
python中,对象分为可变(mutable)和不可变(immutable)两种类型,元组(tuple)、数值型(number)、字符串(string)均为不可变对象,而字典型(dictionary)和列表型(list)的对象是可变对象。
不可变对象
见一个例子,分析不可变对象的特点
python内置id()函数,用于返回对象的唯一标识(identity)。id()返回的是十进制,对象实际内存地址为hex(id(object)),本文中将id()与hex(id())等价使用。
>>>a=1#将变量a与内存中的值为1的内存绑定在一起
>>>a=2#将变量a与内存中值为2的内存绑定在一起,并不是修改原来a绑定的内存中的值,
#这时,原来的这个值为1的内存地址的引用次数减一,当引用计数为0时,内存地址被回收
>>>b=a#变量b绑定与a一样的内存
>>>id(b),id(a)#打印a,b的绑定的内存地址
(1972461824,1972461824)
>>>b=3#创建一个内存值为3的内存地址与变量名字b进行绑定。这时,a还是指向值为2的内存地址
>>>a,b
(2,3)
>>>id(b),id(a)#打印a,b的绑定的内存地址
(1972461856,1972461824)
>>>x=1
>>>y=1
>>>z=1
>>>xisy
True
>>>yisz
True
>>>id(x),id(y),id(z)
(1972461792,1972461792,1972461792)
从第二个例子可看出因为整数为不可变对象,x,y,z在内存中均指向一个值为1的内存地址。
不可变对象最大的优点便是减少重复的值对内存空间的占用。
缺点便是如第一个例子中所示,我要修改这个变量绑定的值,如果内存中没有存在该值的内存块,那么必须重新开辟一块内存,把新地址与变量名绑定。
而不是修改变量原来指向的内存块的值,这回给执行效率带来一定的降低。
原来的内存块会因变量与其他内存块绑定而引用次数减1.
以上内容为大家介绍了python的不可变对象,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:千锋教育。

猜你喜欢LIKE
相关推荐HOT
更多>>
python函数中使用for循环
python函数中使用for循环1、在for循环中使用函数需要更长的执行时间,因为每次迭代都会调用该函数。2、如果for循环是在函数内部实现的,那么该...详情>>
2023-11-14 13:53:34
python3.1版本的特性有哪些
python3.1中的特性有哪些1、千位数格式化,可以在使用字符串格式化函数时直接完成。在格式化大数时,通常是每三位数放置逗号,使数字更易读(例...详情>>
2023-11-14 13:18:27
python__new__()和__init__()有什么区别?
在python中,__new__()不是一定要有,只有继承自object的类才有,该方法可以return父类(通过super(当前类名,cls).__new__())出来的实例,或者直...详情>>
2023-11-14 12:38:55
pythonwheel是什么
python的第一个主流打包格式是.egg文件,现在大家庭中又有了一个叫做Wheel(*.whl)的新成员。wheel“被设计成包含PEP376兼容安装(一种非常接近于...详情>>
2023-11-14 11:30:39热门推荐
技术干货






