Python基础教程

007_Python数据类型综述

Python数据类型综述

Python主要数据类型

  1. Number(数字,包括int、float、complex和bool)
  2. String(字符串,str)
  3. List(列表,list)
  4. Tuple(元组,tuple)
  5. Set(集合,set)
  6. Dictionary(字典,dict)
  7. bytes(字节串,bytes)

不可变数据(4 个):Number(数字)、String(字符串)、Tuple(元组)、bytes(字节串,bytes);

可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。

Python数据类型几乎都是变长度类型,包括int也是内存长度可变,即理论上可以存储任意长度数据。float类型是定长类型。

Python数据类型实质是结构体(对象)

Python默认解释器是CPython,底层代码是C语言。C语言有基本数据类型,比如int(在win64位系统中占4个字节)。而Python中的类型int在64位系统中占用的字节并不是4,而是比4大很多。这种现象很好解释,因为Python中的int类型是用C语言中的结构体struct类型来实现的(一个struct类型中可以由几个C语言中的基本数据类型组成)。

在Python中type()函数可以得到变量的类型,sys.getsizeof()函数可以得到变量在内存中占用字节大小。

import sys
a=3
print(type(a))          # <class 'int'>
print(sys.getsizeof(a)) # 28
a=3.3
print(type(a))          # <class 'float'>
print(sys.getsizeof(a)) # 24
a="a"
print(type(a))          # <class 'str'>
print(sys.getsizeof(a)) # 50

这里我们只需要知道,Python中的数据类型是用C语言的结构体来实现的(便于Python系统维护)。

若想知道Python内部原理,可以在学好C语言之后去研究Python源码。对于仅仅使用Python的读者来说,只需要知道有这么回事就行,不用深究。

定长(度)类型与变长类型

Python中的类型几乎都是变长度类型。int类型当数据不大时,表现为定长度,当数据大时仍然是变长。float类型是定长类型。

import sys
a=3
print(type(a))           # <class 'int'>
print(sys.getsizeof(a))  # 28
a=3333333
print(type(a))           # <class 'int'>
print(sys.getsizeof(a))  # 28
a=3333333333333333333333333333333333333333333333333
print(type(a))           # <class 'int'>
print(sys.getsizeof(a))  # 48

a=3.5
print(type(a))           # <class 'float'>
print(sys.getsizeof(a))  # 24
a=3333333.5
print(type(a))           # <class 'float'>
print(sys.getsizeof(a))  # 24
a=3333333333333333333333333333333333333333333333333.5
print(type(a))           # <class 'float'>
print(sys.getsizeof(a))  # 24

下面再看字符串类型

import sys
a="a"
print(type(a))          # <class 'str'>
print(sys.getsizeof(a)) # 50
a="abc"
print(type(a))          # <class 'str'>
print(sys.getsizeof(a)) # 50

可以看到str类型在内存中长度随内容增加而变长,即变长度类型。

Python中变量类型有部分是定长度类型,也有部分是变长度类型。

可变类型与不可变类型(变量值是否可修改,而内存地址不变)

Python中可变类型是指变量可修改,即内存地址不变,而值可修改。不可变类型是指值不可修改,若要改变值,则会创建新的地址。

Python中内置函数id()可以用来查看变量内存地址。

Python中int和str类型都是不可变类型,即不可改变,若要改变则是创建了新地址。

a=3
print(id(a)) # 140705816682960
a=4
print(id(a)) # 140705816682992
a="a"
print(id(a)) # 1807116023280
a="b"
print(id(a)) # 1807116011696

Python中可变类型比如序列list(后面会介绍)。

a=[3]
print(a,id(a)) # [3] 2583100215688
a[0]=4
print(a,id(a)) # [4] 2583100215688

序列a中的值改变了,但内存地址没有变,即序列a是可变类型。

这篇文章对您有用吗? 1

我们要如何帮助您?