python – 带字符串split()的身份怪癖

python – 带字符串split()的身份怪癖,第1张

概述>>> 'hi'.split()[0] is 'hi' True >>> 'hi there'.split()[0] is 'hi' False>>> 'hi there again'.split()[0] is 'hi' False 我的假设: 第一行只有一个元素,而另外两个元素有多个元素.我相信虽然像str这样的Python原语在函数中按值存储在内存中,但是在 @H_502_6@
>>> 'hi'.split()[0] is 'hi'    True    >>> 'hi there'.split()[0] is 'hi'    False>>> 'hi there again'.split()[0] is 'hi'    False

我的假设:

第一行只有一个元素,而另外两个元素有多个元素.我相信虽然像str这样的Python原语在函数中按值存储在内存中,但是在函数之间会有单独的分配来简化内存管理.我认为split()是其中一个函数,它通常会分配新的字符串.但它也处理不需要任何拆分的输入的边缘情况(例如’hi’),其中简单地返回原始字符串引用.我的解释是否正确?

解决方法

I belIEve that while Python primitives like str are stored in memory by value within a function,there will be separate allocations across functions to simplify memory management.

Python的对象分配不起作用.没有一个真正的“原语”概念,除了字节码编译器合并常量的一些事情外,在同一个函数或不同函数中创建两个对象并不重要.

对于这个没有更好的答案而不是指向源,所以here it is:

Py_LOCAL_INliNE(PyObject *)STRINGliB(split_whitespace)(PyObject* str_obj,const STRINGliB_CHAR* str,Py_ssize_t str_len,Py_ssize_t maxcount){    ...#ifndef STRINGliB_MUtable        if (j == 0 && i == str_len && STRINGliB_CHECK_EXACT(str_obj)) {            /* No whitespace in str_obj,so just use it as List[0] */            Py_INCREF(str_obj);            PyList_SET_ITEM(List,(PyObject *)str_obj);            count++;            break;        }

如果它没有找到任何要拆分的空格,它只会在返回的列表中重用原始字符串对象.这只是编写这个函数的一个怪癖,你不能依赖它在其他Python版本或非标准Python实现中的工作方式.

总结

以上是内存溢出为你收集整理的python – 带字符串split()的身份怪癖全部内容,希望文章能够帮你解决python – 带字符串split()的身份怪癖所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

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

原文地址:https://www.54852.com/langs/1197441.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-03
下一篇2022-06-03

发表评论

登录后才能评论

评论列表(0条)

    保存