python - CPython:为什么 += 字符串会改变字符串变量的 id
问题描述
Cpython对字符串自增操作进行了优化,当为一个字符串初始化内存时,程序会为它留出额外的扩展空间,所以在自增时,原字符串不会被复制到新的位置。我的问题是为什么字符串变量的 id 会发生变化。
>>> s = 'ab'
>>> id(s)
991736112104
>>> s += 'cd'
>>> id(s)
991736774080
为什么字符串变量的 id 会发生变化。
解决方案
字符串是不可变的。+=
在 a上使用str
不是就地操作;它创建一个具有新内存地址的新对象,这就是id()
CPython 的实现。
具体来说str
,__iadd__
没有定义,所以操作回退到一个__add__
或__radd__
。有关详细信息,请参阅 Python 文档的数据模型部分。
>>> hasattr(s, '__iadd__')
False
推荐阅读
- google-cloud-platform - GPU 配额错误,即使我有 Nvidia P100 的配额,对于区域 Us-west1 和 Europe-west4 从 0 到 1
- oop - 将静态方法作为参数传递给 Kotlin 中的另一个方法
- python - 使用最新的python而不全局安装
- css - 背景图像的淡入淡出效果 - 重叠问题
- android - 更改 Admob 帐户后,我的广告没有展示
- python - Pyspark Parquet - 重新分区后排序
- azure - 注册 UnifiedAgentConfiguration Azure Migrate
- excel - 阻止 VBA 宏向 Excel 行数据添加额外的双引号
- terraform - Terraform 从 v0.11 迁移到 v0.12 的标签问题
- java - 具有非主键和不同名称的列的休眠文件 XML 连接表