Skip to content

数据类型

7622字,阅读约47分钟

在 JavaScript 中,我们有基本类型(numberstringbooleanundefinednullsymbol)和引用类型(object,包括数组、函数等)。Python 也有数据类型的概念,但分类方式和 JavaScript 不同,更加细致和清晰。

对比 JavaScript

Python 和 JavaScript 在类型系统设计上有重要差异:

JavaScript 的类型系统

  • 分为基础类型(number, string, boolean, null, undefined)和引用类型(object, array, function)
  • 基础类型按值传递,引用类型按引用传递
  • 有很多隐式类型转换,有时会产生意外结果

Python 的类型系统

  • 所有数据都是对象,没有基础类型和引用类型的区别
  • 更重要的是 可变(mutable)不可变(immutable) 的区别
  • 很少有隐式转换,大多需要显式转换,更加安全可预测

可变性:Python 的核心概念

Python 中,数据类型按可变性分为两大类。理解这个概念的关键是:变量只是指向对象的标签,可变性说的是对象本身能否被修改

不可变类型(Immutable)

  • 对象一旦创建,对象内容不能修改
  • 包括:intfloatstrbooltuplefrozenset
  • 变量可以指向新对象,但原对象不变

可变类型(Mutable)

  • 对象创建后,对象内容可以修改
  • 包括:listdictset
  • 可以直接修改对象内部的数据

让我们用具体例子来理解这个概念:

再看一个更清楚的对比:

这就像 JavaScript 中的基本类型 vs 引用类型:

内置数据类型

Python 默认包含以下几类数据类型:

类型分类数据类型可变性
文本类型str不可变
数值类型int, float, complex不可变
序列类型list, tuple, rangelist 可变,其他不可变
映射类型dict可变
集合类型set, frozensetset 可变,frozenset 不可变
布尔类型bool不可变
二进制类型bytes, bytearray, memoryviewbytes 不可变,其他可变
空值类型NoneType不可变

获取数据类型

就像 JavaScript 中使用typeof一样,Python 使用type()函数来查看数据类型:

type() 返回的是类对象,形如 <class 'int'>,这种格式不够直观,也无法直接进行字符串比较。如果需要获取类型名称的字符串形式,可以使用 type().__name__

数据类型的自动识别

在 JavaScript 中,变量的类型是在赋值时确定的,Python 也是如此:

显式指定数据类型

有时我们想要明确指定变量的数据类型,可以使用构造函数:

类型检查

在实际编程中,我们经常需要检查变量的类型。Python 提供了两种主要方式:type()isinstance()。推荐使用isinstance()函数,因为它能正确处理继承关系,更加安全可靠。

isinstance()可以检查单一类型,也可以同时检查多种类型,非常灵活:

检查None值有特殊的语法。JavaScript 中我们用=== null,Python 中应该使用is None

isinstance()相比type()的优势在于能正确处理继承关系:

类型转换

与 JavaScript 的隐式转换不同,Python 主要依赖显式转换,这让代码更加安全和可预测。JavaScript 中经常出现的"5" + 3 = "53"这样的意外结果,在 Python 中需要明确指定转换方式:

小结

Python 的数据类型体系与 JavaScript 有显著差异,主要体现在:

  1. 类型系统差异:Python 中所有数据都是对象,更关注可变性而非基础类型 vs 引用类型
  2. 可变性概念:不可变类型(int、str、tuple 等)创建后不可修改,可变类型(list、dict、set 等)可以修改内容
  3. 类型识别type()函数查看类型,isinstance()函数进行类型检查(推荐)
  4. 显式转换:Python 避免隐式转换,通过构造函数进行明确的类型转换
  5. 更细致的分类:数值类型分为 int、float、complex,序列类型包含 list、tuple、range 等
  6. 内置集合支持:set 和 frozenset 提供高效的集合操作
  7. 类型安全:较少的隐式转换规则让代码行为更可预测

理解这些概念,特别是可变性和类型检查,是掌握 Python 编程的重要基础。在后续章节中,我们将深入学习每种具体类型的用法和特性。

练习

创建不同类型的变量,练习类型检查和转换:

点击查看参考答案

基于 MIT 许可发布