
>>> '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()的身份怪癖所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)