+=

来源:8-1 静态文件访问原理

chengchengpeng

2019-03-31

图片描述七月老师,刚刚我在看书的时候看到这样一句话,cpython对字符串的+=做了优化,在初始字符串时,留出了额外的空间,在增量操作的时候并不会涉及复制原有字符串到新的位置这类操作,
这是不是意味着不可变的字符串特殊做了就地+=
但是
s = 'abc’
print(id(s))
s += 'dfg’
print(id(s)
前后两次id的打印结果是不同的,就矛盾了。这是哪一步出了问题,

写回答

3回答

7七月

2019-03-31

但这个你不能理解是 id不变吧,我的疑问是你怎么从这个理论推导出id不变的呢。

0
4
7七月
回复
chengchengpeng
这个str的内存分配我是知道的,但我确实觉得这里不能推出id号不变。
2019-03-31
共4条回复

7七月

2019-03-31

你看的这句话是如何证明 id是应该相同的呢?

0
0

7七月

2019-03-31

我不确定,你说的这个优化。但从结果推断,地址确实是不同的。

0
2
chengchengpeng
会不会这样:在对字符串abc初始化的时候,是给出了一段额外的内存,但是id函数只计算字符串abc真正占用了的内存,然后+=后也只计算字符串abc和拼接字符串真正占的内存,我错误的以为id函数计算的是初始化出来的全部内存地址,
2019-03-31
共2条回复

Python Flask高级编程之从0到1开发《鱼书》精品项目

7月老师深入浅出剖析Flask核心机制,和你一起探讨Python高级编程

2735 学习 · 1267 问题

查看课程