内存中None的值是多少?

时间:2016-02-14 12:27:36

标签: python

Python中的

None是一个保留字,只是一个关于None在内存中的确切值的问题。我脑子里想的是这个,None在内存中的表示是0或指向堆的指针。但是指向内存中空区域的指针都不会使零值有意义。因为当我测试以下内容时:

>>> None.__sizeof__()
16

事实证明None消耗了16个字节,而实际上只是一个空值。

  

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

4 个答案:

答案 0 :(得分:12)

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

作为一个真实的对象,它仍然需要有一些头文件,一些反射信息和类似的东西,所以它需要每个python对象占用的最小内存。

答案 1 :(得分:5)

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

每个对象都有这个开销;这就是为什么整数以28的大小开头的原因。你无法改变它,它是Python及其类型系统的实现细节。

答案 2 :(得分:2)

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

>>> None == 0
False
>>> None == []
False
>>> None == False
False
>>> x = None
>>> y = None
>>> x == y
True

不返回任何内容的Void函数将自动返回None对象。程序流不会遇到return语句的函数也返回None。例如:

def a_void_function():
    a = 1
    b = 2
    c = a + b

x = a_void_function()
print(x)

输出: None

这个程序有一个不返回值的函数,虽然它在里面做了一些操作。因此,当我们打印x时,我们得到None,它会自动返回(隐式)。同样,这是另一个例子:

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

x = improper_return_function(3)
print(x)

输出: None

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

答案 3 :(得分:0)

  

事实证明,None只消耗16个字节,而实际上只是一个空值。

没有不是空值。它是一个NoneType对象,代表缺少值,您可以在此处阅读:Python Built-in constants Doc。您可以将None分配给变量,但不能分配给None,因为它会引发语法错误。