Python 如何知道它必须为变量提供新地址?

问题描述 投票:0回答:1

所以我发现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-3.x variables reference pass-by-reference memory-address
1个回答
0
投票

您正在观察“实习”的效果。谷歌“python 整数实习”和“python 字符串实习”。

© www.soinside.com 2019 - 2024. All rights reserved.