Python列表不是同一个引用

Python列表不是同一个引用,python,Python,代码如下: L=[1,2] L is L[:] False 为什么这是错误的?L[:](切片表示法)的意思是:逐元素复制整个列表 因此,您有两个具有相同内容的列表,但它们是独立的实体。由于is计算对象标识,因此它返回False L==L[:]在有疑问时返回True请求id;) list的getslice方法返回一个列表,该方法在您访问L[]时被调用;因此,当您使用“:”参数调用它时,它的行为不会有所不同,它会返回一个新列表,其中包含与原始列表相同的元素 >>> id(L)

代码如下:

L=[1,2]

L is L[:]

False
为什么这是错误的?

L[:]
(切片表示法)的意思是:逐元素复制整个列表

因此,您有两个具有相同内容的列表,但它们是独立的实体。由于
is
计算对象标识,因此它返回
False


L==L[:]
在有疑问时返回
True

请求
id
;)


list的getslice方法返回一个列表,该方法在您访问L[]时被调用;因此,当您使用“:”参数调用它时,它的行为不会有所不同,它会返回一个新列表,其中包含与原始列表相同的元素

>>> id(L)
>>> id(L[:])
>>> L[:] == L 
True
>>> L[:] is L
False

试试这个,它可能也很有见地:
L[:]是L[:]
Reserve
is
测试是否针对无或其他单例(如类或模块)进行检查,否则,您很可能对
=
测试感兴趣(是的,我知道
1是1
在CPython世界中通常返回True,但这并不是一个好主意)。
>>> id(L)
>>> id(L[:])
>>> L[:] == L 
True
>>> L[:] is L
False