当前位置: 首页 > 知识库问答 >
问题:

python字符串连接不会更改字符串id[重复]

常乐
2023-03-14

python中的字符串是不可变的对象。更改字符串应该会创建一个新对象,从而创建一个新id。

出于某种原因,当我尝试执行一个简单的字符串连接时,有时id会改变,有时则不会。我注意到当我所做的更改很小时,它往往不会改变id,但这似乎不是一个足够好的解释。只是想知道为什么会发生这种情况。

这是我闲置shell的截图。如果有人能解释一下,我会非常感激:)

id有时更改,有时不更改的示例

共有1个答案

秦宁
2023-03-14

当字符串的refcount恰好为1时,这可能是一种优化,或者新字符串可以分配在与新取消引用的字符串完全相同的位置。您可以查看Cpython源代码以了解发生了什么。

不管怎样,这都不重要。

 类似资料:
  • 我认为每次更改字符串后,Python字符串的id都必须更改。但我发现真正的行为是不同的。例如,并非输出下面的所有代码字符串都不同: 这就是为什么我认为Python内核正在尝试优化代码,并开始对内存中的字符串进行奇怪的操作。该假设的另一个论点是,常量ID与大小为2的幂的段相关联: 但这其中还有一件奇怪的事。让我们看看随着字符串大小的增加,段大小会发生什么变化: 最后,我们可以尝试近似地将char添加

  • 问题内容: 网上有很多关于python性能的文章,这是您首先读到的:不应使用’+’连接字符串:避免使用s1 + s2 + s3,而应使用str.join 我尝试了以下操作:将两个字符串连接为目录路径的一部分:三种方法: 我不应该做的“ +” 连接 os.path.join 这是我的代码: 这里的结果(python 2.5 WinXP) 难道不是正好相反吗? 问题答案: 的确,您不应使用“ +”。您

  • 问题内容: 关于id类型对象str(在python 2.7中)的某些事情使我感到困惑。该str类型是不可变的,因此我希望一旦创建它,​​它将始终具有相同的id。我相信我说的话不太好,所以我将发布一个输入和输出序列的示例。 因此与此同时,它一直在变化。但是,在有一个指向该字符串的变量之后,情况发生了变化: 因此,一旦变量保存了该值,它似乎就冻结了。确实,在和之后o, 的输出再次更改。 这是不相同的行

  • 问题内容: 我有以下代码 输出为。 Java如何完成字符串连接的技巧? 问题答案: 因为Java将表达式转换为类似 实际上,我认为它可能使用s,因此: 解决更高效 这使用“ 字符串”构建器上的方法(针对每种类型),这些方法可以正确处理

  • 本文章将介绍Thymeleaf标准表达式语法中的概念。 学习如何在Thymeleaf模板中显示对象(Bean)的属性值。 已经将类的bean已经设置为名称为的上下文模型。 为这些和属性添加一些格式,学习使用字符串相连接输出。 最后,修改模板以获得一个合理的静态原型(例如,通过一些原型数据替换并显示结果)。 如果要上机实践,请参考:Thymeleaf+SpringMVC5示例项目。这里不再重复创建项

  • 我正在读一本书叫做。NET Gotchas(非常值得一读),它说明了String和StringBuilder之间的性能差异,它提出了一个我觉得不能没有答案的问题!虽然我不知道这两个类的内部结构(不看这些类的反射版本),但我想知道;因为运算符在。NET是可重载的,为什么微软没有实现String类来在内部使用StringBuilder并重载连接运算符来简单调用。在StringBuilder中追加()?