如果不是myList和myList是否在[]中是什么区别?

kei*_*h24 0 python if-statement list empty-list

当我遇到一个小问题时,我正在处理一些代码.我有点像这样:

if myList is []:
    # do things if list is empty
else:
    # do other things if list is not empty
Run Code Online (Sandbox Code Playgroud)

当我运行程序(并且让myList为空)时,程序将直接进入else语句,这让我感到惊讶.但是,在查看此问题后,我将代码更改为:

if not myList:
    # do things if list is empty
else:
    # do other things if list is not empty
Run Code Online (Sandbox Code Playgroud)

这使得我的程序按照我的预期工作(它运行'if not myList'部分而不是'else'语句).

我的问题是这个if语句的逻辑发生了什么变化?我的调试器(我使用Pycharm)说myList两次都是空列表.

For*_*Bru 5

is比较对象id,这样a is b == (id(a) == id(b)).这意味着两个对象是相同的:不仅它们具有相同的值,而且它们也占据相同的内存区域.

>>> myList = []
>>> myList is []
False
>>> id([]), id(myList)
(130639084, 125463820)
>>> id([]), id(myList)
(130639244, 125463820)
Run Code Online (Sandbox Code Playgroud)

如您所见,[]每次都有不同的ID,因为每次都会分配一块新的内存.