我是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
所以这意味着,我之前提到过的问题只是列表,对吧?如果我只有a
和b
等常规变量,当我更改a
的值时,b
的值不会受到影响。
答案 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
答案 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