在Python编程中,数据类型是变量存储数据的格式和规则。本文梳理Python内置的标准数据类型的核心特性、可变与不可变分类,以及如何用type()和isinstance()检查类型,帮助开发者快速搭建数据类型的知识框架。
一、查看数据类型的两种方法
1. type():精准返回对象类型
每定义一个变量,Python都会为其分配一个类型。使用内置函数type()可以查看任意变量或字面量的具体类型:- num = 18
- print(type(num)) # 输出: <class 'int'>
复制代码
2. isinstance():判断对象是否属于指定类型
isinstance(待检测对象, 类型)返回布尔值True或False,适合在条件分支中做类型校验:- num = 10
- print(isinstance(num, int)) # True
- print(isinstance(num, str)) # False
- s = "python"
- print(isinstance(s, str)) # True
复制代码 实际开发中,isinstance()比type()更灵活,因为它支持继承关系的判断(例如bool是int的子类)。
二、标准数据类型:可变与不可变分类
Python内置类型分为两大类:
1. 不可变类型(修改操作会生成新对象,原对象地址改变)
- Number(数字):int、float、bool
- String(字符串)
- Tuple(元组)
验证不可变性的代码:- # int整数
- a = 10
- print(id(a))
- a = a + 5 # 看似修改,实际创建新对象
- print(id(a)) # id不同
- # 字符串str
- s = "hello"
- print(id(s))
- s += "world"
- print(id(s)) # id改变
- # 元组tuple
- t = (1, 2, 3)
- print(id(t))
- t = t + (4,) # 注意逗号,构造新元组
- print(id(t)) # id改变
复制代码
2. 可变类型(值可原地修改,内存地址不变)
- List(列表)
- Dictionary(字典)
- Set(集合)
验证可变性的代码:- # 列表
- lst = [1, 2, 3]
- print(id(lst))
- lst.append(4)
- lst[0] = 99
- print(id(lst)) # id完全不变
- # 字典
- d = {"name": "小明"}
- print(id(d))
- d["age"] = 18
- print(id(d)) # id不变
- # 集合
- s = {1, 2, 3}
- print(id(s))
- s.add(4)
- print(id(s)) # id不变
复制代码
三、数字类型(Number)的三种子类型
3.1 int 整数
- 可表示正负整数和0。
- Python 3中的int没有长度限制,只要内存足够,数值可以无限大。- a = 10
- b = -66
- c = 0
- d = 9999999999999999999999999999
- print(type(a)) # <class 'int'>
复制代码
3.2 float 浮点数
- 表示带小数点的数字,支持科学计数法(如5e3表示5000.0)。
- 采用双精度存储,存在精度损耗,不适合高精度金额计算(应使用decimal模块)。- f1 = 3.14
- f2 = -0.618
- f3 = 5e3 # 5000.0
- print(type(f1)) # <class 'float'>
复制代码
3.3 bool 布尔类型
- 只有两个值:True和False。
- 本质是int的子类,True=1,False=0,可以直接参与数学运算。
- 注意首字母大写,否则Python会当作普通变量。- flag1 = True
- flag2 = False
- print(True + 5) # 6
- print(isinstance(True, int)) # True
- print(type(flag1)) # <class 'bool'>
复制代码
四、字符串(string)
- 用单引号、双引号或三引号包裹的文本。
- 不可变,不能通过索引修改字符(s[0]='x'会报错)。
- 支持拼接、切片、获取长度等操作。
- 原始字符串(r前缀)可取消转义,例如路径字符串:- s1 = 'hello'
- s2 = "I'm Python"
- s3 = """第一行
- 第二行"""
- s4 = r'C:\Users\name' # 反斜杠不会被转义
- print(type(s1)) # <class 'str'>
复制代码
五、列表(List)
- 有序、可变的元素序列,用方括号[]定义。
- 可存放任意类型元素,支持增删改查。- lst = [10, "张三", 3.14]
- lst[0] = 99 # 允许修改
- print(type(lst)) # <class 'list'>
复制代码
六、元组(Tuple)
- 有序、不可变的元素序列,用圆括号()定义。
- 可视为只读列表,安全性更高。- t = (1, 2, "abc")
- # t[0] = 5 # 报错:'tuple' object does not support item assignment
- print(type(t)) # <class 'tuple'>
复制代码
七、字典(Dictionary)
- 键值对映射类型,用大括号{key:value}定义。
- 键必须为不可变类型(如int、str、tuple),且唯一不重复;值可以是任意数据类型。
- 查询效率高,适合存储结构化数据。- dic = {"name": "李四", "age": 22, "score": [90, 88]}
- print(dic["name"]) # 通过键取值
- print(type(dic)) # <class 'dict'>
复制代码
八、集合(Set)
- 无序、不重复的元素容器,用大括号{元素}定义。
- 自动去重,常用于去重、交集并集等数学运算。
- 底层基于哈希表实现。- s = {1, 2, 2, 3, 3, 3}
- print(s) # {1, 2, 3} 自动去重
- print(type(s)) # <class 'set'>
复制代码
总结:
- 用type()查看对象具体类型,用isinstance()进行类型判断。
- Python基础类型分为数字、字符串、元组(不可变)和列表、字典、集合(可变)。
- 选择类型时,可变性是一个关键依据:需要频繁修改时用列表或字典,数据固定时用元组,唯一性要求用集合。
- 数字类型中的整型无上限,布尔型可直接参与算术运算,浮点数注意精度问题。
掌握这些基础数据类型的特性和用法,能帮助你编写更健壮、更高效的Python代码。 |