什么是数据类型?
数据类型在数据结构中的定义是一个值的集合以及定义在这个值集上的一组操作。
通俗来讲,我们人类可以很容易的分清数字与字符的区别,但是计算机并不能,除非你明确的告诉它,1
是数字,数
是文字,否则它是分不清1
和数
的区别的。因此,就需要对变量进行明确的划分。想让计算机进行数值运算,就传数字给它,想让他处理文字,就传字符串类型给他。
Python3 中有六个标准的数据类型,如下:
- Number(数字)
- String(字符串)
- List(列表)
- Tuple(元组)
- Set(集合)
- Dictionary(字典)
其中:
-
不可变数据类型(3个):
Number(数字)、String(字符串)、Tuple(元组) -
可变数据类型(3 个):
List(列表)、Dictionary(字典)、Set(集合)
什么叫不可变数据类型?
变量所指向的内存地址处的值是不可以被改变的叫做不可变数据类型。理解起来有点费劲?请接着往下看。
在 Python 的世界里,一切皆为对象,任何变量都是对象的引用。所有的对象都是存储在内存中的,每一块儿内存都有一个唯一的“门牌号”,叫做地址。
我们定义一个整数,如 22
,在Python中用 id(22)
来获取 22
在内存中的地址,如下:
>>> id(22)
4536155600
>>> x = 22
>>> id(x)
4536155600
>>> y=22
>>> id(y)
4536155600
>>>
如上代码所示,变量22的地址是 4536155600,将22赋值给变量x,x的地址也是 4536155600。同样,y的地址也是一样的。说明,无论定义多少变量,只要值是22,他们的地址就都一样。
那么,直接将44赋值给x,x的值不就改变了吗,不就变成44了吗?没错,我们接着看:
>>> x = 44
>>> id(x)
4536156304
>>> id(44)
4536156304
>>> id(22)
4536155600
>>> id(y)
4536155600
>>>
我们看到执行 x = 44
后变量x的地址变成 4536156304 了,而变量y和22的地址并没有改变。
由此可见,我们说变量x是不可变数据类型,是指变量x引用的地址处的值是不能改变的,这个值只能被创建或销毁。当我们执行 x = 44
这个赋值操作时原地址处的值22并没有改变,而是新创建一个对象,这个对象的值是44,变量x重新引用这个新对象。当原对象无人引用时,Python会在适当的时候自行回收这块内存。
什么叫可变数据类型?
变量所指向的内存地址处的值是可以被改变的叫做可变数据类型。有了上面的基础,接下来我们理解就会容易很多。以列表list
为例:
>>> x = [1, 2, 3]
>>> id(x)
4539284688
>>> x.append(4)
>>> x
[1, 2, 3, 4]
>>> id(x)
4539284688
>>>
如上所示,改变变量x的值,但变量引用的地址依旧不变。因此可变数据类型是说对一个变量所指向的内存地址处的值是可以被变的,值的变化并不会引起新建对象,即地址是不会变的。
练习题
-
习题1:
x = y = 22 x = 44 猜猜x, y的值分别是什么?
-
习题2:
a = b = [1, 2, 3] a.append(4) 猜猜a, b的值分别是什么?
网友评论