详细分析之Python可变对象和不可变对象-Python教程

资源魔 28 0

正在 Python 中所有均可以看做为工具。每一个工具都有各自的 id, type 以及 value。

  1. id: 当一个工具被创立后,它的 id 就没有会正在扭转,这里的 id 其实就是工具正在内存中的地点,能够应用 id() 去查看工具正在内存中地点。
  2. type: 以及 id 同样当工具呗创立之后,它的 type 也不克不及再被扭转,type 决议了该工具所可以支持的操作
  3. value: 工具的值

一个工具可变与否就正在于 value 值能否支持扭转。

相干学习保举:python视频教程

不成变工具

常见的不成变工具(i妹妹utable objects):

  1. Number: int, float, complex
  2. string
  3. tuple
  4. 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):

  1. list
  2. dict
  3. 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使用问题 可变对象 不可变对象

抱歉,评论功能暂时关闭!