python中的不可变对象,python自定义类是可变对象吗

  python中的不可变对象,python自定义类是可变对象吗

  在Python中一切都可以被看作一个对象。每个对象都有自己的id、类型和值。

  Id:当一个对象被创建时,它的Id不会改变。这里的id实际上是对象在内存中的地址。可以使用id()来检查对象在内存中的地址。类型:与id相同。对象创建后,其类型不能更改。类型确定对象可以支持的操作。value:对象的值可以更改也可以不更改。一个对象能不能变,取决于value值能不能变。

  相关学习推荐:python视频教程

  不可变对象

  通用不可变对象):

  另一类number : int,float,complexstring upfrozenset 3360 set。我们通过例子来感受一下。

  例子

  x=1

  y=x

  id(x)==id(y)

  真实的

  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)

  错误的

  id(x)==id(1)

  错误的

  id(1)==id(y)

  真的不丑从结果来看,x指向的对象变了,而1没有变。这是一个不可变的对象。对于不可变对象,一旦创建,就不允许更改。

  注意,不变性并不严格等同于绝对不变性。

  a=([1],2,3)

  id(a)

  4338862696

  id(a[0])

  4338949128

  a[0][0]=0

  id(a)

  4338862696

  id(a[0])

  338949128从上面的例子不难看出,我们改变了a[0]的值,但是并没有影响它的id值。如果不可变容器对象包含对可变对象的引用,当可变对象的值发生变化时,前者的值也会发生变化;但是容器仍然是不可变的对象,因为它的id值不会改变。

  可变对象

  通用可变对象):

  Listdictset也是通过例子感受到的。

  例子

  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仍然指向同一个对象,由此不难得出结论,修改一个可变对象的值不会对其id产生任何影响。

  函数参数

  对于可变对象和不可变对象,当函数作为参数传递时,它们的行为是不同的。

  例子

  eg0

  定义更新列表(nums列表):

  print(f 2 id : { id(nums _ list)} )

  nums_list=[10]

  print(f 3 id : { id(nums _ list)} )

  数字列表=[5,6]

  print(f1:{number_list},id:{id(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

  定义添加编号:

  打印(f2:{id(number)} )

  数字=1

  打印(f3:{id(number)} )

  数量=1

  print(f 1: {数字},id:{id(数字)} )

  添加数量(数量)

  Print (f 4: {num},ID : {ID (num)} )。看看结果

  1:1,id:4343768416

  2 id:4343768416

  3 id:4343768448

  433361,id:4343768416

  在其他文章中,上面的eg0称为引用传递,eg1称为值传递。但是,在官方文件中,并没有关于这两个名词的任何内容,或者说这种方式不是上述两者之一。

  这里的重点是:对于可变对象,函数中值的变化会引起对象的变化;对于不可变对象,函数中值的改变不会对它们产生任何影响。以上是详细分析的Python可变对象和不可变对象的详细内容。请多关注热门IT软件开发工作室的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: