- 使 Python 字符串不可变的设计原因是什么?它如何使编程更容易?
- 我已经习惯了可变字符串,比如 C 语言中的字符串。如果没有可变字符串,我该如何编程?有什么最佳实践吗?
原文由 Sergey 发布,翻译遵循 CC BY-SA 4.0 许可协议
原文由 Sergey 发布,翻译遵循 CC BY-SA 4.0 许可协议
与 C 字符串相比,不可变字符串极大地简化了内存分配:您不会猜测长度并过度分配希望您过度分配足够。
它们更安全:您 永远不会 像在 C 中那样让缓冲区溢出。
只有一个可变字符串用例。
所有 其他字符串用例(连接、搜索等)的可变性无关紧要。在所有其他情况下,可变性无关紧要。
如果要在 Python 中替换字符或子字符串,只需创建一个新字符串
x = x[:place] + replacement + x[place+1:]
这是唯一新颖或独特的代码。
由于我无法理解的原因,添加以下内容似乎很重要。
“除了不可变字符串之外,还有其他方法可以避免字符串缓冲区溢出。”
出于这个问题的目的(特别是关于 Python),不可变字符串有一个令人愉快的结果,即没有缓冲区溢出。对于其他语言,适用其他原则、规则和细微差别。
原文由 S.Lott 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答5.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
当您收到一个字符串时,您将确保它保持不变。假设您使用字符串参数构造一个
Foo
,然后修改该字符串;然后Foo
的名字会突然改变:使用可变字符串,您必须始终制作副本以防止坏事发生。
它还允许单个字符与长度为 1 的字符串没有区别的便利性,因此所有字符串运算符也适用于字符。
最后,如果字符串不是不可变的,您就不能可靠地将它们用作
dict
中的键,因为它们的哈希值可能会突然改变。至于使用不可变字符串进行编程,只需习惯以与对待数字相同的方式对待它们:作为 _值_,而不是对象。更改
name
的第一个字母将是