Python零基础从入门到精通详细教程8-数据类型高级应用 - 上篇

1.简介

前边文章宏哥已经讲解和分享了各种数据类型之间的相互转换,以及有的数据类型不允许互相转换的知识,这是一种数据类型的高级应用,今天我们再来讲解和分享一下,在日常的工作中可能会用的其他的数据类型高级应用。

2.数据类型的高级应用

2.1类型转换

Python提供了内置函数用于数据类型之间的转换,如int()float()str()等。这个在前边的文章中已经详细地讲解和分享过了,这里不再详细说了,一笔带过。

🌐示例代码:

python 复制代码
# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-07-04
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程8-数据类型高级应用 - 上篇 
'''

# 3.导入模块

num = "123"
print(int(num) + 1) # 输出:124

🔄运行结果:

2.2可变与不可变的深入理解

不可变数据类型在修改时会创建新对象,而可变数据类型则直接修改原对象。这一特性对内存管理和性能优化有重要影响。想象你有一张刻在石板上的字------一旦刻完,任何修改都只能重刻一块新石板。这就是不可变类型的本质。

2.2.1不可变类型:一旦创建,不再改变

想象你有一张刻在石板上的字------一旦刻完,任何修改都只能重刻一块新石板。这就是不可变类型的本质。

✅典型代表:

  • 基本类型int, float, bool
  • 文本序列str(字符串)
  • 固定容器tuple(元组)、frozenset(冻结集合)
  • 二进制数据bytes

✅三大核心特性

1、修改即新生 每次"修改"都会创建新对象,原对象纹丝不动:

🌐示例代码:

python 复制代码
# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-07-04
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project:Python零基础从入门到精通详细教程8-数据类型高级应用 - 上篇 
'''

# 3.导入模块
name = "Python"
print(id(name))  # 输出内存地址A
name += "!"
print(id(name))  # 输出新地址B(原字符串仍存在内存中)

🔄运行结果:

2、哈希值恒定 不可变对象可哈希(hash()),因此能作为字典的键:

🌐示例代码:

python 复制代码
# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-07-04
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程8-数据类型高级应用 - 上篇 
'''

# 3.导入模块

config = {("host", 8080): "server1"}  # 元组作键合法
print(config)

🔄运行结果:

3、线程安全利器 无需锁机制,多线程环境下可安全共享。

✅实战避坑

函数传参无影响

🌐示例代码:

python 复制代码
# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-06-16
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程8-数据类型高级应用 - 上篇 
'''

# 3.导入模块

def update_num(x):
    x += 10

value = 5
update_num(value)
print(value)  # 输出5(原始值未改变)

🔄运行结果:

函数内操作地是局部副本,外部变量不受影响。

2.2.2可变类型:灵活多变的"变形金刚"

如同一个可擦写的笔记本,可变对象允许在原内存地址上直接修改内容。

✅典型代表

  • 动态容器list(列表)、dict(字典)、set(集合)
  • 字节缓冲区bytearray

✅四大关键特征

1、原地修改,ID不变

🌐示例代码:

python 复制代码
# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-07-04
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程8-数据类型高级应用 - 上篇 
'''

# 3.导入模块

nums = [1, 2]
print(id(nums))  # 地址X
nums = nums.append(3)   # 地址X不变

🔄运行结果:

2、禁止作为字典键 因内容可变导致哈希值不稳定,会破坏哈希表结构。

可变对象(mutable objects)由于其值可以在其生命周期内改变,所以它们不是可哈希的。例如,列表(list)和字典自身(dict)是不可哈希的。尝试将可变对象用作字典的键将会引发错误:

🌐示例代码:

python 复制代码
# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-07-04
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程8-数据类型高级应用 - 上篇 
'''

# 3.导入模块

# 尝试使用列表作为字典的键会引发TypeError
my_dict = {[1, 2, 3]: 'value'}  # TypeError: unhashable type: 'list'
print(my_dict)

🔄运行结果:

3、函数传参的隐蔽陷阱

🌐示例代码:

python 复制代码
# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-07-04
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程8-数据类型高级应用 - 上篇 
'''

# 3.导入模块

def add_item(items):
    items.append("new")

my_list = ["a", "b"]
add_item(my_list)
print(my_list)  # 输出['a', 'b', 'new'](原列表被修改!)

🔄运行结果:

函数内外操作的是 同一个对象

4、默认参数的"记忆效应"

🌐示例代码:

python 复制代码
# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-07-04
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程8-数据类型高级应用 - 上篇 
'''

# 3.导入模块

def buggy_func(data=[]):
    data.append(1)
    return data

print(buggy_func())  # [1]
print(buggy_func())  # [1, 1](默认列表被保留并修改)

🔄运行结果:

解决方案 :用None作为默认值:

🌐示例代码:

python 复制代码
# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-07-04
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程8-数据类型高级应用 - 上篇 
'''

# 3.导入模块

def safe_func(data=None):
    data = data or []
    data.append(1)
    return data

print(safe_func())  # [1]
print(safe_func())  # [1]

🔄运行结果:

2.2.3深度解析

1. 元组中的可变元素 元组本身不可变,但若元素是可变对象(如列表),可修改其内部:

🌐示例代码:

python 复制代码
# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-07-04
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程8-数据类型高级应用 - 上篇 
'''

# 3.导入模块

mixed = ([1, 2], "text")
mixed[0].append(3)  
print(mixed)  # ([1,2,3], "text")

🔄运行结果:

2. 深浅拷贝的抉择

  • 浅拷贝 :只复制顶层对象(copy.copy()
  • 深拷贝 :递归复制所有层级(copy.deepcopy()

🌐示例代码:

python 复制代码
# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-07-04
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程8-数据类型高级应用 - 上篇 
'''

# 3.导入模块

import copy

origin = [1, [2, 3]]
shallow = copy.copy(origin)
deep = copy.deepcopy(origin)

origin[1].append(4)

print(origin)# [1, [2, 3, 4]]
# 内层列表仍是同一对象
print(shallow)# [1, [2, 3, 4]]
# 完全独立的新对象
print(deep)# [1, [2, 3]]

🔄运行结果:

3. 性能优化秘籍 频繁拼接字符串时,先暂存到列表再合并,效率提升百倍:

🌐示例代码:

python 复制代码
# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-07-04
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程8-数据类型高级应用 - 上篇 
'''

# 3.导入模块
import time
# 低效做法(每次拼接生成新对象)
s = ""
start = time.time()
for _ in range(10000):
    s += str(_)
end = time.time()
print("低效做法时间:", end - start)
# 高_效做法
buffer = []
start = time.time()
for _ in range(10000):
    buffer.append(str(_))
s = "".join(buffer)
end = time.time()
print("高效做法时间:", end - start)

🔄运行结果:

2.2.4总结:选择数据类型的黄金法则

✅建议

  • 传递可变对象时,明确是否需要副本(使用copy模块)
  • 在函数中修改可变参数前,三思是否会影响外部状态
  • 大型项目中使用类型注解(Type Hints)增强可读性

掌握可变与不可变的底层逻辑,你将:

✅ 写出安全可靠的代码 ✅ 避免90%的参数传递陷阱 ✅ 深入理解Python内存管理机制

2.3数据类型的性能比较

不同数据类型在操作时的性能差异显著。例如,列表的查找速度较慢,而字典的查找速度极快。

🌐示例代码:

python 复制代码
# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-07-04
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程8-数据类型高级应用 - 上篇 
'''

# 3.导入模块
import time

# 列表查找
my_list = list(range(1000000))
start = time.time()
print(999999 in my_list)
end = time.time()
print("列表查找时间:", end - start)

# 集合查找
my_set = set(range(1000000))
start = time.time()
print(999999 in my_set)
end = time.time()
print("集合查找时间:", end - start)

🔄运行结果:

3.小结

掌握Python的数据类型是编程的基础,从基本的数据类型如数字、字符串、布尔值和空值,到高级的数据类型如列表、元组、字典和集合,每一个数据类型都有其独特的应用场景和操作方法。通过本文的详细讲解和示例代码,读者可以更好地理解和运用这些数据类型,从而在Python编程的道路上走得更远。

好了,今天时间也不早了,关于数据类型的高级应用的知识和内容远远不止宏哥讲解和分享的这冰山一角,宏哥就讲解和分享了一些常用的基础知识,有兴趣的童鞋或者小伙伴可以自行查资料进行详尽的了解和学习,感谢您耐心的阅读,希望对您有所帮助。

相关推荐
迷曳9 分钟前
28、鸿蒙Harmony Next开发:不依赖UI组件的全局气泡提示 (openPopup)和不依赖UI组件的全局菜单 (openMenu)、Toast
前端·ui·harmonyos·鸿蒙
爱分享的程序员22 分钟前
前端面试专栏-工程化:29.微前端架构设计与实践
前端·javascript·面试
上单带刀不带妹25 分钟前
Vue3递归组件详解:构建动态树形结构的终极方案
前端·javascript·vue.js·前端框架
-半.27 分钟前
Collection接口的详细介绍以及底层原理——包括数据结构红黑树、二叉树等,从0到彻底掌握Collection只需这篇文章
前端·html
没有bug.的程序员40 分钟前
JAVA面试宝典 -《 架构演进:从单体到 Service Mesh》
java·面试·架构
90后的晨仔1 小时前
📦 Vue CLI 项目结构超详细注释版解析
前端·vue.js
@大迁世界1 小时前
用CSS轻松调整图片大小,避免拉伸和变形
前端·css
一颗不甘坠落的流星1 小时前
【JS】获取元素宽高(例如div)
前端·javascript·react.js
白开水都有人用1 小时前
VUE目录结构详解
前端·javascript·vue.js
if时光重来1 小时前
axios统一封装规范管理
前端·vue.js