是列表';s变量是Python中的对象吗?

是列表';s变量是Python中的对象吗?,python,Python,我明白a是b是假的,但我不明白a是[1,2,3]是假的 我学到的变量类似于对象的昵称,比如x=2和id(x)==id(2) 但是id(a)与id(b)不同 在这种情况下,a是对象吗?不是变量?Python中的所有内容都是对象a是b计算结果为false,因为您知道,它们不是同一个对象。它们都是列表类的实例,因此在内存中有不同的位置,并且在每个方面都是完全分离的,除了它们的类结构或蓝图(如您所想)id(a)和id(b)将反映这一点,它们不是同一个对象,因此不会共享id。这是对它们在内存中位置的引用,

我明白
a是b
是假的,但我不明白
a是[1,2,3]
是假的

我学到的变量类似于对象的昵称,比如
x=2
id(x)==id(2)

但是
id(a)
id(b)
不同


在这种情况下,a是对象吗?不是变量?

Python中的所有内容都是对象
a是b
计算结果为false,因为您知道,它们不是同一个对象。它们都是
列表
类的实例,因此在内存中有不同的位置,并且在每个方面都是完全分离的,除了它们的类结构或蓝图(如您所想)<代码>id(a)和
id(b)
将反映这一点,它们不是同一个对象,因此不会共享id。这是对它们在内存中位置的引用,虽然id不是引用指针,但它们的相似之处在于它们描述它们不相同

>a=[1,2,3]
>>>b=[1,2,3]
>>>id(a)==id(b)
假的
>>>#以下是一个示例,每个会话将产生不同的ID,
>>>#因为它每次都存储在一个独特的mem位置
>>>身份证(a)
2770873780160
>>>身份证(b)
2770873412800
>>>id(a)-id(b)#只是为了显示位置上的差异。
367360


变量是对对象的引用<代码>a引用的对象与
b
引用的对象不同。即使这两个对象是相同的,它们在内存中也有唯一的地址,并且互不依赖

a = [1,2,3]
b = [1,2,3]
x=2
id(x)=id(2)
的情况下,整数是不可变的,而在CPython中
id
只是对象在内存中的位置。整数总是相同的,因此在不同的地址多次存储相同的整数会浪费内存


但是,通常不要将整数与
is
运算符一起使用,因为这可能会在不同的python实现中导致不同的结果。

造成混淆的一个原因可能是cpython对小常量整数进行了一些内部优化。不要使用
2
,试着使用
20000
。除了上面建议的帖子外,还可以查看这些主题相关的帖子:和。
>>> a = b = [1,2,3]
>>> c = [1,2,3]
>>> print(a is b)
True
>>> print(a is c or b is c)
False
>>> a.remove(1)
>>> print(a)
[2, 3]
>>> print(b)
[2, 3]
>>> print(c)
[1, 2, 3]