Python 巨蟒:“;“链接定义”;ints与列表的比较

Python 巨蟒:“;“链接定义”;ints与列表的比较,python,Python,我刚刚在Python中发现了变量的定义。即: a = b = 0 a = 1 给我a=1和b=0或者a和b是两个独立变量 但是: 给我a=[0]和b=[0],或者a和b是对同一对象的两个引用。这让我很困惑,这两种情况有何不同?这是因为int是基本类型还是因为列表只是指针?a和b总是指向同一个对象。但是你不能改变整数,它是不可变的 在第一个示例中,您反弹a以指向另一个对象。在另一个示例中,您没有这样做,您从未将另一个对象指定给a 相反,您要求对象a引用改变自身,向该对象添加另一个条目。对同一对象

我刚刚在Python中发现了变量的定义。即:

a = b = 0
a = 1
给我
a=1
b=0
或者a和b是两个独立变量

但是:


给我
a=[0]
b=[0]
,或者a和b是对同一对象的两个引用。这让我很困惑,这两种情况有何不同?这是因为
int
是基本类型还是因为列表只是指针?

a
b
总是指向同一个对象。但是你不能改变整数,它是不可变的

在第一个示例中,您反弹
a
以指向另一个对象。在另一个示例中,您没有这样做,您从未将另一个对象指定给
a

相反,您要求对象
a
引用改变自身,向该对象添加另一个条目。对同一对象的所有其他引用(
列表
)将看到这些更改。这是因为
list
对象是可变的

正确的比较方法是重新分配
A
以指向新的列表对象:

a = b = []
a = [0]

现在您可以看到
a
b
仍在引用第一个列表对象。

您必须了解
a
b
只是指向初始空列表的引用:

>>> a = [] # set variable a to an empty list
>>> b = a  # sets b to what a is pointing to
>>> a.append(0) # add a zero to the original

# Step 1: A --> [ ]
# Step 2: A --> [ ] <-- B
# Step 3: A --> [0] <-- B
>>a=[]#将变量a设置为空列表
>>>b=a#将b设置为a所指向的对象
>>>a.append(0)#在原始值上加一个零
#步骤1:A-->[]

#步骤2:A-->[[0]2操作不同。在第一种情况下,您为a指定了一个新值,而在第二种情况下,修改a所指的对象。测试不一致。尝试
a=b=[];a=[1,2,3]
相关视频:投票人:这是一个非常合理的问题,让很多Python程序员都大吃一惊。以文本形式:
>>> a = [] # set variable a to an empty list
>>> b = a  # sets b to what a is pointing to
>>> a.append(0) # add a zero to the original

# Step 1: A --> [ ]
# Step 2: A --> [ ] <-- B
# Step 3: A --> [0] <-- B