什么是数据类型?

数据类型可以简单理解为就是按照数据的特性赋予它所能表现的类型,这么说可能很多人都不理解什么意思,我们来举个简单的例子,人为什么很容易区分数字和字母,比如1和A,我们一眼就能看出来1是个数字,而A是个字母,但是计算机却不能区分它们,因为计算机只认识二进制编码,所以我们需要告诉计算机,1是个数字,A是个字母,对这些数据做明确的规定,一是方便我们阅读,二是能进行一些特定的计算。

什么是动态类型语言?

一开始我并不打算去解释什么是动态类型语言,我在网上搜集资料的时候发现,网上很多人都把动态语言和动态类型语言混为一谈,这不是误人子弟吗?动态语言和动态类型语言是完全不同的两个概念,动态语言说的是代码结构,而动态类型语言说的是数据类型。

在这里我们重点说动态类型语言,所谓的动态类型语言就是,就是类型的检查是在运行时才做。类型对于变量,属性,方法以及方法的返回类型都是可有可无的,在给变量赋值时才决定它的类型。

说简单点就是,在给变量赋值的时候不用考虑数据类型,Python会自动指定类型,如果变量数值更改了,也不用担心数据类型,Python一样会自动转换成对应的数据类型。

python的基本数据类型

Python之所以在科学领域很火,我觉得和它的数据类型有一定的关系,Python提供了6种基本数据类型。这些类型都非常实用,几乎每种类型都会用得上。

python基本的数据类型有数字(Number)、字符串(String)、列表(List)、元组(Tuple)、字典(Dictionary)、集合(Set)。

根据数据类型特点可以分为不可变数据类型和可变数据类型。

  • 不可变数据类型:当该数据类型的对应变量的值发生了改变,那么它对应的内存地址也会发生改变,对于这种数据类型,就称不可变数据类型。包括数字、字符串、元组。
  • 可变数据类型:当该数据类型的对应变量的值发生了改变,那么它对应的内存地址不发生改变,对于这种数据类型,就称可变数据类型。包括列表、字典、集合。
graph TD; 基本数据类型 --> 不可变数据类型 基本数据类型 --> 可变数据类型 不可变数据类型 --> 数字 不可变数据类型 --> 字符串 不可变数据类型 --> 元组 可变数据类型 --> 列表 可变数据类型 --> 字典 可变数据类型 --> 集合

或许很多初学者都看不明白,这里举个例子来说明。

下面的图片是不可变数据类型的描述图,这是个字符串类型的,先看左边,我们定义了一个变量,名为A,然后我们给这个变量赋值小明,那么这个小明就会在存在内存a中,变量A指向了内存a,然后看右边,把变量A的值改成了小红,这里并不是把内存a中的数据变成小红,而是把小红存在内存b,然后把A指向内存b。


如果还是看不懂,可以通过代码简单了解下。这里不需要知道代码什么意思,只需要知道运行后会打印出变量A的内存地址。一开始变量A赋值为小明,指向的地址是72804208,然后把A变成小红,指向的地址变成了72804226。说明改变的不是值本身,而是内存地址。

1
2
3
4
5
6
7
8
A = "小明"
print("变量A的内存地址:"+str(id(A)))

A = "小红"
print("变量A的内存地址:"+str(id(A)))
------运行结果---------
变量A的内存地址:72804208
变量A的内存地址:72804256

再来看看可变数据类型,这里用列表来举例,同样的定义变量A,然后将列表赋值给变量,列表里存着小明和小红,然后将小明改成小东,变量的指向并不会发生变化,改变的是变量里的值。


这里给变量A赋值一个列表,列表里存着小明和小红,内存地址为61997992,然后将列表的小明改成了小东,发现内存地址并没有发生改变。说明改变的不是内存地址,而是值本身。

1
2
3
4
5
6
7
8
9
10
11
12
A = ["小明","小红"]
print("变量A的内存地址:"+str(id(A)))
print("变量A的值为:"+str(A))

A[0] = "小东"
print("变量A的内存地址:"+str(id(A)))
print("变量A的值为:"+str(A))
------运行结果---------
变量A的内存地址:61997992
变量A的值为:['小明', '小红']
变量A的内存地址:61997992
变量A的值为:['小东', '小红']