字符串是否在Python中合并?

字符串是否在Python中合并?,第1张

字符串是否在Python中合并?

字符串在Python中是不可变的,因此实现可以决定是否进行内部(这通常与C#相关联,这意味着某些字符串存储在池中)这个字符串。

在您的示例中,您正在动态创建字符串。CPython并不 总是 查看池以检测字符串是否已经存在-
这也没有意义,因为您首先必须保留内存以创建字符串,然后将其与池内容进行比较(长期效率低下)字符串)。

但是对于长度为1的字符串,CPython确实会查询池(参见“ stringobject.c”):

static PyStringObject *characters[UCHAR_MAX + 1];...PyObject *PyString_FromStringAndSize(const char *str, Py_ssize_t size){...    if (size == 1 && str != NULL &&    (op = characters[*str & UCHAR_MAX]) != NULL)    {        #ifdef COUNT_ALLOCS one_strings++;        #endif        Py_INCREF(op);        return (PyObject *)op;    }...

所以:

a = str(num)b = str(num)print a is b # <-- this will print False in most cases (but try str(1) is str(1))

但是,当直接在代码中使用 常量 字符串时,CPython使用相同的字符串实例:

a = "text"b = "text"print a is b # <-- this will print True


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5630244.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存