Python六大基础数据类型全维度解析(区分可变/不可变)
博客摘要
Python官方六大内置基础类型:数字、字符串、列表、元组、字典、集合。本文按照可变/不可变核心维度分类,理清内存修改逻辑,解决新手分不清什么时候修改原数据、什么时候生成新数据的问题。
一、分类总览:不可变(值不可改)、可变(值可改)
类型分类 | 包含类型 | 内存特性 |
|---|---|---|
不可变类型 | 数字(int/float/bool/complex)、字符串(str)、元组(tuple) | 内部数据无法原地修改,修改必定生成新内存对象 |
可变类型 | 列表(list)、字典(dict)、集合(set) | 支持原地增删改,内存地址不发生改变 |
二、逐个类型详解+实操案例
1、数字类型 Number
包含4个子类型:int整型(无位数上限,支持超大整数)、float浮点型(存在精度丢失,如0.1+0.2≠0.3)、bool布尔型(True=1,False=0,属于int子类)、complex复数(工程极少使用)。
易错点:浮点精度丢失解决方案:使用decimal标准库做高精度运算。
2、字符串 str
由单/双/三引号包裹的字符序列,不可变。所有字符串修改(替换、拼接)都会新建对象,不会改动原字符串。
3、列表 list
有序、可重复、元素类型任意,中括号[]定义,可变类型。底层是动态数组,自动扩容缩容,查询速度快,中间插入删除速度慢。
4、元组 tuple
有序、可重复、元素类型任意,小括号()定义,不可变。唯一特例:元组内嵌套列表,列表内部数据可以修改,元组本身地址不变。
5、字典 dict
3.7及以上版本有序,key不可重复、必须是不可变类型,value任意类型,大括号键值对定义,可变类型。底层哈希表实现。
6、集合 set
无序、不可重复、元素必须是不可变类型,大括号无键值对定义,可变类型。主要作用天然去重,不支持索引取值。
面试高频问答
问:元组是不可变类型,为什么元组里列表能改?答:元组不可变指的是元素的内存地址不可变,列表地址不变,内部数据修改不违反规则。
