Python 内存中“无”的值是多少?

Python 内存中“无”的值是多少?,python,Python,Python中的None是一个保留字,只是我脑海中闪过一个关于None在内存中的确切值的问题。我脑海中的想法是,None在内存中的表示要么是0,要么是指向堆的指针。但是指向内存中空白区域的指针和零值都没有意义。因为当我测试以下内容时: >>> None.__sizeof__() 16 结果是None消耗16个字节,对于一个空值来说,这实际上太多了 那么None在内存中实际代表什么呢 None是单例对象,它不提供(几乎)None方法和属性,它的唯一目的是表示某些特定操作没有值

Python中的
None
是一个保留字,只是我脑海中闪过一个关于
None
在内存中的确切值的问题。我脑海中的想法是,
None
在内存中的表示要么是0,要么是指向堆的指针。但是指向内存中空白区域的指针和零值都没有意义。因为当我测试以下内容时:

>>> None.__sizeof__()
16
结果是
None
消耗16个字节,对于一个空值来说,这实际上太多了

那么
None
在内存中实际代表什么呢


None
是单例对象,它不提供(几乎)None方法和属性,它的唯一目的是表示某些特定操作没有值


作为一个真正的对象,它仍然需要有一些头、一些反射信息和类似的东西,这样它就占用了每个python对象占用的最小内存。

None
引用了
NoneType
的一些python对象,实际上它是同类对象中唯一的实例。因为它是一个Python对象,就像其他任何东西一样,它不仅仅是原始内容,还存储了其他对象信息,比如它的类型


每个物体都有这个开销;例如,这就是整数以28开头的原因。您不能更改它,它是Python及其类型系统的一个实现细节。

在Python中,None是一个表示没有值或空值的特殊常量。它是它自己的数据类型的对象,非类型。我们不能创建多个None对象,但可以将其分配给变量。这些变量将彼此相等。我们必须特别注意,None不表示False、0或任何空列表、字典、字符串等。例如:

>>> None == 0
False
>>> None == []
False
>>> None == False
False
>>> x = None
>>> y = None
>>> x == y
True
def a_void_function():
    a = 1
    b = 2
    c = a + b

x = a_void_function()
print(x)
def improper_return_function(a):
    if (a % 2) == 0:
        return True

x = improper_return_function(3)
print(x)
不返回任何内容的Void函数将自动返回None对象。程序流未遇到返回语句的函数也返回None。例如:

>>> None == 0
False
>>> None == []
False
>>> None == False
False
>>> x = None
>>> y = None
>>> x == y
True
def a_void_function():
    a = 1
    b = 2
    c = a + b

x = a_void_function()
print(x)
def improper_return_function(a):
    if (a % 2) == 0:
        return True

x = improper_return_function(3)
print(x)
输出:
None

该程序有一个不返回值的函数,尽管它在内部执行一些操作。所以当我们打印x时,我们没有得到自动(隐式)返回的结果。同样,这里还有另一个例子:

>>> None == 0
False
>>> None == []
False
>>> None == False
False
>>> x = None
>>> y = None
>>> x == y
True
def a_void_function():
    a = 1
    b = 2
    c = a + b

x = a_void_function()
print(x)
def improper_return_function(a):
    if (a % 2) == 0:
        return True

x = improper_return_function(3)
print(x)
输出:
None

虽然这个函数有一个return语句,但并不是在所有情况下都能到达它。只有当输入为偶数时,函数才会返回True。因此,如果我们给函数一个奇数,则隐式返回None

事实证明,没有一个会消耗16个字节,对于一个空值来说,这实际上太多了


None不是空值。它是一个
NoneType
对象,表示没有值,您可以在此处阅读:。您可以将
None
分配给变量,但不能将其分配给None,因为这会引发语法错误。

None
不表示空值。这是一个表示没有价值的对象。这就是我所想的,但我忘了提到这个。