跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python

Python 字符串格式化、编码与深浅拷贝详解

Python 字符串处理涵盖格式化、编码转换及对象拷贝机制。格式化可使用%操作符或 format 方法;编码涉及内存 unicode 与存储传输 utf-8/gbk 的转换;深浅拷贝通过 copy 模块实现,浅拷贝仅复制第一层,深拷贝递归复制所有层级;bytes 为不可变字节序列,bytearray 为可变字节序列,常用于二进制数据操作。

人间失格发布于 2019/2/26更新于 2026/9/1056 浏览
Python 字符串格式化、编码与深浅拷贝详解

字符串格式化

百分号格式化

需要指定数据类型,且需要一一对应。

s = "vae"
d = 32
print("我叫%s,年龄%d" % (s, d))  # 我叫 vae,年龄 32

Format 方法

Format 是 Python 特有的,不需要指定数据类型,不需要一一对应。

s = "vae"
d = 32
print("我叫{},年龄{}".format(s, d))  # 我叫 vae,年龄 32
print("我叫{0},年龄{1},真名{0}".format(s, d))  # 我叫 vae,年龄 32,真名 vae
L = ["许嵩", 32, "vae"]
print("我叫{0},年龄{1},真名{0}".format(*L))  # 我叫许嵩,年龄 32,真名许嵩

字符串编码(encode、decode)

Python 3 里面字符编码实际类型: a. 内存中字符运行的时候编码是 unicode,用空间换时间 b. 硬盘存储中或者网络传输过程中用 utf-8,追求空间

1 字节==8 位 utf-8:英文:8;中文:24; unicode:所有的都是 16 位

encode 编码:unicode 转换为指定编码 decode 解码:将原编码转换成 unicode

s = "中"  # 程序执行时,"中"会以 unicode 形式存在在内存中
# encode 编码
s1 = s.encode("utf-8")  # b'\xe4\xb8\xad'
print(s1)
s2 = s.encode("gbk")  # b'\xd6\xd0'
print(s2)
# decode 解码
print(s1.decode("utf-8"))  # 中
print(s2.decode("gbk"))  # 中
# gbk-->utf-8 通过 unicode 来转换
print(s2.decode("gbk").encode("utf-8"))  # b'\xe4\xb8\xad'

深浅拷贝

通过 id() 查看内存地址

s = "嵩"
n = 5
print(id(s))  # 2966737504576
print(id(n))  # 140713250513872

赋值

注: 字符串、数字:赋值还有深浅拷贝无意义,因为其永远指向同一个内存地址

n1 = {"k1":"v1", "k2":123, "k3":["hh", 18]}
n2 = n1
print(id(n1))  # 2568221657344
print(id(n2))  # 2568221657344

浅拷贝

只在内存中额外创建了第一层数据。

import copy
n1 = {"k1":"v1", "k2":123, "k3":["hh", 18]}
n3 = copy.copy(n1)  # 浅拷贝,只在内存中额外创建了第一层数据
print(id(n1))  # 1907149736192
print(id(n3))  # 1907149736264 内存地址变化了
print(id(n1["k3"]))  # 1907152948360
print(id(n3["k3"]))  # 1907152948360 内存地址没有改变

深拷贝

只有最底层的内存地址没有改变。

import copy
n1 = {"k1":"v1", "k2":123, "k3":["hh", 18]}
n4 = copy.deepcopy(n1)  # 深拷贝
print(id(n1))  # 2603325884672
print(id(n4))  # 2603328856856 内存地址变化了
print(id(n1["k3"]))  # 2603329101384
print(id(n4["k3"]))  # 2603329101384 内存地址改变了
print(id(n1["k3"][0]))  # 3055213298104
print(id(n4["k3"][0]))  # 3055213298104 内存地址没有改变

Bytes 与 Bytearray

  • bytes
print(type("vae"))  # <class 'str'>
print(type(b"vae"))  # <class 'bytes'>

bytes 和 byte 的区别,字符串是字符的序列

  • str 转换为 bytes
s = "中"  # str
s1 = s.encode("utf-8")  # 编码方式变成了 utf-8,str 通过 encode 转换为 bytes
print(s1)  # b'\xe4\xb8\xad'
  • bytes 通过 decode 转换为 str
s2 = s1.decode("utf-8")  # decode 中传入其原来的编码方式:utf-8;系统自动将原来的编码方式 utf-8 解码为 unicode 编码方式
print(s2)  # 中
  • bytearray:可变
S1 = "你好,世界"
print(S1.encode("utf-8"))  # bytes
B1 = bytearray(S1.encode("utf-8"))  # bytearray
print(B1)
print(type(B1))  # <class 'bytearray'>

# 分解步骤
S = "哈哈"
S1 = "你好,世界"
B1 = bytearray(S1.encode("utf-8"))
B2 = bytearray(S.encode("utf-8"))
print(B2)
B1[:6] = B2  # 将 你好 替换成 哈哈
print(B1.decode("utf-8"))  # 哈哈,世界

S1 = "你好,世界"
B1 = bytearray(S1.encode("utf-8"))
B1[:6] = bytearray("美丽", encoding="utf-8")
print(B1.decode("utf-8"))  # 美丽,世界

目录

  1. 字符串格式化
  2. 百分号格式化
  3. Format 方法
  4. 字符串编码(encode、decode)
  5. encode 编码
  6. decode 解码
  7. gbk-->utf-8 通过 unicode 来转换
  8. 深浅拷贝
  9. 通过 id() 查看内存地址
  10. 赋值
  11. 浅拷贝
  12. 深拷贝
  13. Bytes 与 Bytearray
  14. 分解步骤

更多推荐文章

查看全部
  • C++ 类与对象:运算符重载、赋值与取址详解
  • GitHub Token 配置教程:PakePlus 云打包权限安全设置
  • Claude Code Security 深度解析与实战指南
  • C 语言初阶算法习题实战解析(二)
  • Llama-AVSR 论文精读:基于 LLM 的视听语音识别新框架
  • Web 聊天室消息加解密方案详解
  • TTS 接口加密逆向分析:基于 WebAssembly 的请求响应全流程
  • AI 高效采集全渠道用户需求的实操技巧
  • 农业机器人自主导航与 5 大核心路径规划算法解析
  • 文件上传漏洞详解与绕过技巧
  • DeepSeek 各版本说明与优缺点分析
  • 3 个网络安全低成本练手项目:附 GitHub 源码与实现步骤
  • 金仓数据库全链路性能优化:从 SQL 到存储的效率提升方案
  • 鸿蒙 4.2/4.3 安装谷歌框架教程
  • DSRL: 使用潜空间强化学习引导扩散策略
  • 前端微前端架构实践:告别巨石应用
  • Web 自动化测试入门:核心概念与百度搜索实战
  • Raphael AI:基于 Flux 模型的免费 AI 图像生成工具
  • Anaconda 安装与 Python 环境配置完整指南
  • StyleSelectorXL:在 SDXL 里管理 77 种绘画风格

相关免费在线工具

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online