在python中复制变量

use*_*251 1 python numpy copy

这个问题已经多次讨论过,但我仍然对此感到困惑.以下代码段说明了此问题:

a = np.arange(10)
m = a
m[0] = 1000
m
Out[106]: array([1000,    1,    2,    3,    4,    5,    6,    7,    8,    
9])
a
Out[107]: array([1000,    1,    2,    3,    4,    5,    6,    7,    8,    9])
Run Code Online (Sandbox Code Playgroud)

现在让我们做

a = np.arange(10)
m = a
m = m + 1000
m
Out[102]: array([100, 101, 102, 103, 104, 105, 106, 107, 108, 109])
a
Out[103]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
Run Code Online (Sandbox Code Playgroud)

我想完全理解在计算m = m + 1000时变量a没有被修改的原因.我不明白这里的逻辑....

Alf*_*lfe 6

你找到了a = a + b和之间的区别a += b.第一创建一个新的值(a + b),并把它分配给可变左侧的=(a).第二个更改+=(由a和保持的数组)的剩余值,并且m保存此值(am)的所有变量都反映了更改.

如果你尝试+=代替,既am改变,因为它们都持有相同的价值:

a = np.arange(10)
m = a
m += 1000
a
Run Code Online (Sandbox Code Playgroud)

由此可见:

array([1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009])
Run Code Online (Sandbox Code Playgroud)