添加到列表时为什么Python复制值而不是指针?

juk*_*uke 2 python pointers scope

我想做什么(C代码):

int a = 2, b = 3, c = 4;

int* arr[3] = {&a, &b, &c};

for (int i = 0; i < 3; ++i) {
    if (*(arr[i]) > 1) {
        *(arr[i]) = 1
    }
}
Run Code Online (Sandbox Code Playgroud)

我期待Python用这段代码做类似的行为指针.

>>> a = 2
>>> b = 3
>>> c = 4
>>> for x in [a, b, c]:
...     if x > 1:
...             x = 1
... 
>>> a,b,c
(2, 3, 4)
Run Code Online (Sandbox Code Playgroud)

如何在Python中实现C代码的行为?

Dav*_*ebb 6

Python在这个意义上没有指针.

Python变量是绑定到值而不是内存中位置的名称,因此更改一个变量的值不会更改具有相同值的另一个变量的值.

你可以locals你想要的东西来实现:

>>> a = 2
>>> b = 3
>>> c = 4
>>> for x in 'a','b','c':
...    if locals()[x] > 1:
...       locals()[x] = 1
... 
>>> a
1
Run Code Online (Sandbox Code Playgroud)

但是,我强烈建议不要这样做.如果你发布另一个解释问题的问题,你试图解决,你将获得更多的"Pythonic"方式.

可能只是将您的值存储在以下情况中dict:

>>> vals = { 'a' : 2, 'b' : '3', 'c' : 4 }
>>> for key,value in vals.items():
...     if value > 1:
...        vals[key] = 1
... 
>>> vals
{'a': 1, 'c': 1, 'b': 1}
Run Code Online (Sandbox Code Playgroud)