None
是一个保留字,只是一个关于None
在内存中的确切值的问题。我脑子里想的是这个,None
在内存中的表示是0或指向堆的指针。但是指向内存中空区域的指针都不会使零值有意义。因为当我测试以下内容时:
>>> None.__sizeof__()
16
事实证明None
消耗了16个字节,而实际上只是一个空值。
那么
None
在内存中实际代表了什么?
答案 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,因为它会引发语法错误。