Python的基本数据类型大致可分为6类:1.Number(数字) 2. String(字符串) 3. Tuple (元组) 4. List(列表) 5. Dictionary (字典) 6. Sets(集合) (bool布尔类型、int整型、float浮点型、complex复数等都归为Number数字类型)
这6种类型又可以分为可变类型和不可变类型,其中不可变类型有:Number(数字) String(字符串) Tuple (元组)。可变类型有: List(列表) Dictionary (字典) Sets(集合)。
不可变数据类型:不可变数据类型的变量在第一次赋值声明(由于是解释型语言,python中声明和定义是分不开的,即出现给变量赋值就会分配其相应的内存空间。)的时候, 会在内存中开辟一块空间, 用来存放这个变量被赋的值, 存放这个值的内存空间就是内存中的一个地址, 而这个变量实际上存储的, 并不是被赋予的这个值, 而是存放这个值所在空间的内存地址, 通过这个地址, 变量就可以在内存中取出数据了。 所谓不可变就是说, 我们不能改变这个数据在内存中的值, 所以当我们改变这个变量的赋值时, 只是在内存中重新开辟了一块空间, 将这一条新的数据存放在这一个新的内存地址里, 而原来的那个变量就不在引用原数据的内存地址而转为引用新数据的内存地址了。
(
简单地说(id是获取内存地址的值):
>>> a=5
>>> id(a)
140708493550352
>>> a=7
>>> id(a)
140708493550416
>>> id(5)
140708493550352
也就是说a=5的时候,首先开辟了一个内存把5放进去,a只是相当于这个内存中的引用而已,而即使a=7之后,我们依然可以发现放5的内存仍然在。当然,重新运行程序的话,id(5)不一定会是同样的值。
)
可变数据类型:当你第一次赋值声明了一个可变数据类型的时候, 同样会在内存中开辟一个空间, 并且将你所赋的数据值放在这块内存中, 然后将这个变量指向数据所在的内存所在位置, 不同的是, 可变数据类型可以对内存中的数据进行修改, 并且不会导致变量引用地址的变化, 但是这种修改仅限于Python中的内置方法, 比如list.append(), list.remove(), dict.pop(), dict.clear()等, 如果要是进行重新赋值的操作的话, 一样会改变变量的地址指向(即使你使用同样的值,比如数组[1,2,3])。而且当变量重新指向了新的内存之后,之前的内存也就被自动回收了。
(例如:
>>> a = [1, 2, 3]
>>> id(a)
41568816
>>> a = [1, 2, 3]
>>> id(a)
41575088
>>> a.append(4)
>>> id(a)
41575088
>>> a += [2]
>>> id(a)
41575088
>>> a
[1, 2, 3, 4, 2]
不过我们也可以发现
>>> id([1,2,3])
2862503824648
>>> id([1,2,3])
2862506945224
也就是说两次[1,2,3]用的不是同一个内存里面的[1,2,3]了,即存放前一个[1,2,3]的内存已经被回收
)
转载请标明出处,原文地址:https://blog.csdn.net/come_from_pluto