Python中的列表问题

时间:2017-05-22 08:57:09

标签: python

我是Python的菜鸟。我看到了这段代码,我不太明白。

list_1 = ['History', 'Math', 'Physics', 'CompSci']
list_2 = list_1

print(list_1)
print(list_2)

list_1[0] = 'Art'

print(list_1)
print(list_2)

程序执行后,我知道list_1最终是['Art', 'Math', 'Physics', 'CompSci'],但为什么list_2也是['Art','Math','Physics','CompSci “]。我的意思是,在第二个list_2 = list_1之后没有print(list_1)。有人可以帮帮我吗?谢谢!

更新

我尝试了一些新代码。

a = 40
b = a
print(a)
print(b)

a = 50
print(a)
print(b)

结果是

40
40
50
40

所以这意味着,我之前提到过的问题只是列表,对吧?如果我只有ab等常规变量,当我更改a的值时,b的值不会受到影响。

2 个答案:

答案 0 :(得分:4)

list_2 = list_1使list_2 引用成为list_1引用的完全相同的列表。在整个程序中,内存中只有一个列表。

打印内存地址时可以验证这一点:

list_1 = ['History', 'Math', 'Physics', 'CompSci']
list_2 = list_1

print(id(list_1))
# 5430888
print(id(list_2))
# 5430888

你一定要读这个:https://nedbatchelder.com/text/names.html

答案 1 :(得分:3)

撰写list_2 = list_1后,list_1变量所持的地址将与list_2所持的地址相同。

因此,list_1上的每个更改都会在list_2上看到,因为这两个变量都代表同一个对象。

您可以通过比较两个变量的ID来检查:

>>> id(list_1)
1518664319304
>>> id(list_2)
1518664319304

甚至更好:

>>> list_1 is list_2
True