正在 Python 中所有均可以看做为工具。每一个工具都有各自的 id, type 以及 value。
- id: 当一个工具被创立后,它的 id 就没有会正在扭转,这里的 id 其实就是工具正在内存中的地点,能够应用 id() 去查看工具正在内存中地点。
- type: 以及 id 同样当工具呗创立之后,它的 type 也不克不及再被扭转,type 决议了该工具所可以支持的操作
- value: 工具的值
一个工具可变与否就正在于 value 值能否支持扭转。
相干学习保举:python视频教程
不成变工具
常见的不成变工具(i妹妹utable objects):
- Number: int, float, complex
- string
- tuple
- frozenset:set 的另一品种型
让咱们经过例子感触一下
例子
>>> x=1 >>> y=x >>> id(x)==id(y) True >>> id(1)==id(y) True
这里创立了两个 int 工具,而且让 x,y 指向同一个工具,而后咱们试着修正一下 x,让 x+1
>>>x=x+1
这个时分 x 的 id 值以及 y 的 id 和 1 的 id 还同样吗?
>>> x=x+1 >>> id(x)==id(y) False >>> id(x)==id(1) False >>> id(1)==id(y) True
从后果没有好看进去,x 所指向的工具曾经扭转了,然而 1 并无扭转。这就是不成变工具,关于不成变工具来讲,一旦创立之后就没有容许被扭转。
留意: 不成变其实不严格同等相对的不成变
>>> a=([1],2,3) >>> id(a) 4338862696 >>> id(a[0]) 4338949128 >>> a[0][0]=0 >>> id(a) 4338862696 >>> id(a[0]) 4338949128
从下面的例子没有好看出,咱们扭转了 a[0] 的值,然而并无影响它的 id 值。一个不成变容器工具假如蕴含对可变工具的援用,当后者的值扭转时,前者的值也会扭转;然而该容器仍属于不成变工具,由于它的 id 值没有会扭转的。
可变工具
常见的可变工具(mutable objects):
- list
- dict
- set
一样的经过例子感触一下
例子
>>> c = [1,2,3] >>> b = c >>> id(b)==id(c) True
创立两个 list 工具,而且让 c,d 指向同一个工具,而后咱们试着修正一下 c
c[0]=4
这个时分正在看一下两个工具的 id 值能否分歧
>>> id(c)==id(b) True
修正之后,c,d 依然指向同一个工具,以是没有可贵出论断,关于一个可变工具来讲,修正 value 值其实不会对它的 id 造成任何影响
函数参数
关于可变工具以及不成变工具,他们二者正在函数当做参数通报的时分体现也有所没有同
例子
eg0
def update_list(nums_list): print(f'2 id:{id(nums_list)}') nums_list += [10] print(f'3 id:{id(nums_list)}') number_list = [5, 6] print(f'1:{number_list}, id:{id(number_list)}') update_list(number_list) print(f'4:{number_list}, id:{id(number_list)}')
看一下后果
1:[5, 6], id:4457707912
2 id:4457707912
3 id:4457707912
4:[5, 6, 10], id:4457707912
正在看另一个例子
eg1
def add_num(number): print(f'2:{id(number)}') number += 1 print(f'3:{id(number)}') num = 1 print(f'1:{num}, id:{id(num)}') add_num(num) print(f'4:{num}, id:{id(num)}')
看一下后果
1:1, id:4343768416
2 id:4343768416
3 id:4343768448
4:1, id:4343768416
有其余有些文章中,下面 eg0 被称为援用通报,eg1 被称为值通报。但是正在民间文档中,并无找到无关的这两个名词的任何内容,或许这类形式并非上述的二者恣意一种。
这里的重点是:关于可变工具,正在函数中的值的扭转,会招致工具扭转;关于不成变工具,正在函数中值的扭转,对其没有会造成任何影响
以上就是具体剖析之Python可变工具以及不成变工具的具体内容,更多请存眷资源魔其它相干文章!
标签: Python python教程 python编程 python使用问题 可变对象 不可变对象
抱歉,评论功能暂时关闭!