Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 更改var1的值_Python_Pointers_Variable Assignment - Fatal编程技术网

Python 更改var1的值

Python 更改var1的值,python,pointers,variable-assignment,Python,Pointers,Variable Assignment,我的问题更多的是理解问题,而不是严格的编程问题。 我知道python变量实际上是指针,这意味着它们实际上并不存储值,而是指向内存中存储该值的位置。 我无法理解的是以下两种情况的区别: >>> a = 3 >>> b = a >>> a 3 >>> b 3 >>>b = 4 >>> b 4 >>> a 3 分配给“b”的新值不会更改“a”指向的值。反对: >>

我的问题更多的是理解问题,而不是严格的编程问题。 我知道python变量实际上是指针,这意味着它们实际上并不存储值,而是指向内存中存储该值的位置。 我无法理解的是以下两种情况的区别:

>>> a = 3
>>> b = a
>>> a
3
>>> b
3
>>>b = 4
>>> b
4
>>> a
3
分配给“b”的新值不会更改“a”指向的值。反对:

>>> a = [1,2,3]
>>> b = a
>>> a
[1,2,3]
>>> b
[1,2,3]
>>> b.append(4)
>>> b
[1,2,3,4]
>>> a
[1,2,3,4]

分配给b的新值更改了a调用
b时指向的值。append
不会将
b
分配给新列表。它仍然指向内存中的相同位置

>>> b = [1,2,3]
>>> id(b)
36586568L
>>> b.append(4)
>>> id(b)
36586568L

由于更改的是基础数据,因此也指向该数据的任何其他标识符都将受到影响。

调用
b.append
不会将
b
分配给新列表。它仍然指向内存中的相同位置

>>> b = [1,2,3]
>>> id(b)
36586568L
>>> b.append(4)
>>> id(b)
36586568L

由于更改的是基础数据,因此也指向该数据的任何其他标识符都将受到影响。

这一点以前已经讨论过很多次。简而言之,它们并不是严格意义上的指针。它们更像是标签。在您的大写字母中,b被重新标记为4,因此会发生变化。在最下面的情况下(使用数组),b不会被重新标记,只会将其内容附加到。这就是为什么数组的行为似乎有所不同

这一点以前已经讨论过很多次了。简而言之,它们并不是严格意义上的指针。它们更像是标签。在您的大写字母中,b被重新标记为4,因此会发生变化。在最下面的情况下(使用数组),b不会被重新标记,只会将其内容附加到。这就是为什么数组的行为似乎有所不同

Python“变量”(“绑定”是一个更合适的术语)不是指针,而是命名空间中的键->值对。如何实现命名空间和查找是一个实现细节,但您可以认为它是一个哈希表(Python的代码> DICT)。 分配给b的新值更改了a指向的值

b.append(4)
中,您在哪里看到赋值运算符?你不是在重新绑定
b
,而是在变异它。它仍然是绑定到名称
a
b

Python“变量”(“绑定”将是更合适的术语)的同一个列表对象,它们不是指针,而是命名空间中的键->值对。如何实现命名空间和查找是一个实现细节,但您可以认为它是一个哈希表(Python的代码> DICT)。 分配给b的新值更改了a指向的值


b.append(4)
中,您在哪里看到赋值运算符?你不是在重新绑定
b
,而是在变异它。它仍然是绑定到两个名称
a
b
的同一个列表对象

a=[1,2,3];b=a;b=[7,8,9];打印一份;打印b;这会给你一个提示吗?a=[1,2,3];b=a;b=[7,8,9];打印一份;打印b;这能给你一个暗示吗?