Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可变对象在Python中的真正含义是什么_Python - Fatal编程技术网

可变对象在Python中的真正含义是什么

可变对象在Python中的真正含义是什么,python,Python,我对可变对象的真正含义感到困惑 A=[1,3,4] print(id(A)) A.append(1) print(id(A)) 打印输出显示相同的地址,而对于以下内容 A=[1,3,4] print(id(A)) A=A+[1,2] print(id(A)) 首先,它不会报告错误,因为我认为它是可变的,它将执行迭代过程,另一方面,地址是不同的。可变对象意味着可以更改的数据类型,例如列表、字典等,因为您可以随时向其追加或添加值 相反,不可变对象是不能更改的对象,例如python中的元组 希望有

我对可变对象的真正含义感到困惑

A=[1,3,4]
print(id(A))
A.append(1)
print(id(A))
打印输出显示相同的地址,而对于以下内容

A=[1,3,4]
print(id(A))
A=A+[1,2]
print(id(A))

首先,它不会报告错误,因为我认为它是可变的,它将执行迭代过程,另一方面,地址是不同的。

可变对象意味着可以更改的数据类型,例如列表、字典等,因为您可以随时向其追加或添加值

相反,不可变对象是不能更改的对象,例如python中的元组

希望有帮助


您必须使用.append函数

可变对象意味着可以更改的数据类型,例如列表、字典等,因为您可以随时向它们追加或添加值

相反,不可变对象是不能更改的对象,例如python中的元组

希望有帮助

执行此操作时必须使用.append函数

A = [1,2,3]
A.append(1)
A = [1,2,3]
A = A + [1,2]
您在适当位置修改列表,因此不会导致其地址发生更改。另一方面,当你这样做的时候

A = [1,2,3]
A.append(1)
A = [1,2,3]
A = A + [1,2]
创建临时新对象a+[1,2],然后将现有列表a重新绑定到此新创建的对象,即新创建的列表,从而更改其地址/id。

A = [1,2,3]
A.append(1)
A = [1,2,3]
A = A + [1,2]
A = [1,2,3]
A.append(4) #just appends new element to list (but does not create new memory address to A)
A = A + [5,6] # first do [1,2,3,4] + [5,6] => [1,2,3,4,5,6], then assign this to A (which is creating and assigning new memory address to A).
您在适当位置修改列表,因此不会导致其地址发生更改。另一方面,当你这样做的时候

A = [1,2,3]
A.append(1)
A = [1,2,3]
A = A + [1,2]

您创建一个临时的新对象a+[1,2],然后将现有列表a重新绑定到此新创建的对象,即新创建的列表,从而更改其地址/id。

第一个示例通过调用append来更改列表。因此,对象的id每次都是相同的

A = [1,2,3]
A.append(4) #just appends new element to list (but does not create new memory address to A)
A = A + [5,6] # first do [1,2,3,4] + [5,6] => [1,2,3,4,5,6], then assign this to A (which is creating and assigning new memory address to A).
第二个示例将变量A重新分配给一个新列表,该列表是连接两个列表的结果。这不会改变原始列表。要了解原因,让我们做一个小修改:

A=[1,3,4]
print(id(A))
B=A+[1,2]
print(id(A))
print(id(B))

现在您将看到,idA在两次测试中都是相同的。您的原始代码与此等效,只是您不再有对第一个列表的引用。

第一个示例通过调用append来修改列表。因此,对象的id每次都是相同的

第二个示例将变量A重新分配给一个新列表,该列表是连接两个列表的结果。这不会改变原始列表。要了解原因,让我们做一个小修改:

A=[1,3,4]
print(id(A))
B=A+[1,2]
print(id(A))
print(id(B))

现在您将看到,idA在两次测试中都是相同的。除了不再引用第一个列表之外,您的原始代码与此等效。

添加一些示例输出:一个对象是可变的并不意味着您实际对其进行了变异。添加一些示例输出:一个对象是可变的并不意味着您实际对其进行了变异。但是为什么“+”方法会更改address@8908信息技术没有但为什么“+”方法会更改address@8908没有做