我相信尽管像str这样的Python原语是通过函数内的值存储在内存中的,但为了简化内存管理,函数中会有不同的分配。
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, 0, (PyObject *)str_obj);
count++;
break;
}
如果它没有找到任何空白分裂,它只是重新使用原来的字符串对象在返回的列表中。这只是这个函数写法的一个怪癖,你不能依赖它在其他Python版本或非标准Python实现中以这种方式工作。
否,原因是“是”是指相同的存储器位置它与'=='不一样,将你的比较改为==,它们会正常工作,'是'应该只用于比较静态内存中的元素,比如None。True/False – gkusner