欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python数据类型,可变数据类型与不可变数据类型

程序员文章站 2022-04-03 09:58:20
Python3有6个标准数据类型,分别是NumberStringTupleListSetDictionary三个可变数据类型(List、Dictionary、Set)三个不可变数据类型(Number、String、Tuple)以下内容主要内容参考至Python的可变与不可变数据类型,做了一点点变动,大家可以直接查看该文章。摘取一位网友评论:对于不可变类型,变量(引用)指向的地址的内容是不可变的,改变变量的值只是将变量(引用)指向了新的地址。对于可变类型,变量(引用)指向的地址的内...

Python3有6个标准数据类型,分别是

  1. Number
  2. String
  3. Tuple
  4. List
  5. Set
  6. Dictionary

三个可变数据类型(List、Dictionary、Set)
三个不可变数据类型(Number、String、Tuple)

以下内容主要内容参考至Python的可变与不可变数据类型,做了一点点变动,大家可以直接查看该文章。

摘取一位网友评论:
对于不可变类型,变量(引用)指向的地址的内容是不可变的,改变变量的值只是将变量(引用)指向了新的地址。
对于可变类型,变量(引用)指向的地址的内容是可变的,除非重新赋值,否则对变量的改变都是对原地址内容的改变。

以Number中的Int类型为例来观察不可变类型:

>>> x = 1
>>> id(x)
28832088
>>> y = 1
>>> id(y)
28832088
>>> x = 2
>>> id(x)
28832064
>>> y = x
>>> id(y)
28832064
>>> z = 4
>>> id(4)
28832016
>>> x += 2
>>> id(x)
28832016
>>> import gc
>>> del x,z
>>> gc.collect()
0
>>> id(4)
28832016

上面这段程序都是对不可变数据类型中的int类型的操作,id()查看的是当前变量的地址值。我们先来看x = 1和y = 1两个操作的结果,从上面的输出可以看到x和y在此时的地址值是一样的,也就是说x和y其实是引用了同一个对象,即1,也就是说内存中对于1只占用了一个地址,而不管有多少个引用指向了它,都只有一个地址值,只是有一个引用计数会记录指向这个地址的引用到底有几个而已。当我们进行x = 2赋值时,发现x的地址值变了,虽然还是x这个引用,但是其地址值却变化了,后面的y = x,使得x、y都引用了同一个对象,即2,所以地址值都是一样的。当给z赋值4时,又创建了一个新的对象4,及不管是直接赋值的4(z = 4),还是通过运算的出的4(x += 2)都指向同一内存地址。
同时还需要注意,在python程序运行时,可以主动回收变量(del x),但对象4所占用的内存,什么时候回收还不一定(比如上面的,虽然对象x,z已被删除,但对象4所占用的内存一直未释放),这个需要进一步尝试。

不可变数据类型可以理解为x引用的内存地址处的值是不能被改变的,也就是28832088地址处的值在没被垃圾回收之前一直都是1,不能改变,如果要把x赋值为2,那么只能将x引用的地址从28832088变为28832064,相当于x = 2这个赋值又创建了一个对象,即2这个对象,然后x、y都引用了这个对象,所以int这个数据类型是不可变的,如果想对int类型的变量再次赋值,在内存中相当于又创建了一个新的对象,而不再是之前的对象。

关于不可变数据类型,大家直接参考Python的可变与不可变数据类型

参考:
Python的可变与不可变数据类型

本文地址:https://blog.csdn.net/shaozhulei555/article/details/107643141

相关标签: python 编程语言