所以我发现Python总是通过引用传递,而append总是存储对附加变量的引用,所以我很好奇append如何,因为下面的代码不给出10 10s:
ls = []
for i in range(0,10):
a = 1 + i
print(id(a))
ls.append(a)
ls
给出:
1771416348976
1771416349008
1771416349040
1771416349072
1771416349104
1771416349136
1771416349168
1771416349200
1771416349232
1771416349264
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
因此它为每个循环提供了一个全新的变量 a 。然后我尝试了以下代码:
ls = []
for i in range(0,10):
a = 1
print(id(a))
ls.append(a)
ls
给出:
1771416348976
1771416348976
1771416348976
1771416348976
1771416348976
1771416348976
1771416348976
1771416348976
1771416348976
1771416348976
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
所以它知道不必每次都给出新变量。最后我尝试了以下代码:
ls = []
for i in range(0,10):
a = 1
print(id(a))
ls.append(a)
a = 10
print(id(a))
ls
给出:
1771416348976
1771416349264
1771416348976
1771416349264
1771416348976
1771416349264
1771416348976
1771416349264
1771416348976
1771416349264
1771416348976
1771416349264
1771416348976
1771416349264
1771416348976
1771416349264
1771416348976
1771416349264
1771416348976
1771416349264
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
显然python给同一个变量'a'两个不同的地址,我以为它会修改1到10。
那么Python如何为变量分配地址呢?如果修改了同一变量,它似乎总是为该变量提供一个新地址,并且如果将某些旧值重新分配给该变量,它将重用旧地址。
您正在观察“实习”的效果。谷歌“python 整数实习”和“python 字符串实习”。