我正在尝试自学python(和一般的编程),并且对变量赋值有点困惑.我明白,如果我有
>>> a = [1,2,3]
>>> b = a
Run Code Online (Sandbox Code Playgroud)
它b指的是内存中的同一个对象a.因此,如果我想创建一个新列表,b使用与当前相同的值a,我将如何实现?
另外,请考虑以下示例:
>>> a = [1, 2, 3]
>>> b = a
>>> x = a[1]
>>> a[1] = 4
>>> print a, b, x
[1, 4, 3] [1, 4, 3] 2
Run Code Online (Sandbox Code Playgroud)
我从这个例子中看到,这x是一个新对象,但b指向a.有人可以向我解释这里发生了什么,为什么x是一个新的对象,但b不是?
考虑这个例子:
In [20]: a = [[1], [2], [3]]
In [21]: b = a
In [22]: x = a[1]
In [23]: a
Out[23]: [[1], [2], [3]]
In [24]: b
Out[24]: [[1], [2], [3]]
In [25]: x
Out[25]: [2]
In [26]: a[1][0] = 4
In [27]: a
Out[27]: [[1], [4], [3]]
In [28]: b
Out[28]: [[1], [4], [3]]
In [29]: x
Out[29]: [4]
Run Code Online (Sandbox Code Playgroud)
这里的区别在于,当我们修改它时,a[1]我们是通过修改它来实现的,而不是告诉它a[1]引用一个全新的东西。
在你的例子中,当你告诉它x引用任何a[1]所指的内容时,它会引用一些具体的东西,无论a[1]当时是什么,在你的例子中是一个特定的整数。
后来你说a[1]要改变,它就改变了。但它用来指代的东西并没有停止存在(因为x仍然在那里指代它)。
通过说,x = a[1]你并不是在说,x应始终指代a[1]所指的事物。
您所说的x应指此时a[1]指派的任何内容。
同样的情况b也一样,只是被b告知要引用的“具体”事物是一个完整的列表——它可以有变化的内容。
另一个例子:
a = [1, 2, 3,]
b = a
print a, b
# Prints
#[1, 2, 3]
#[1, 2, 3]
a = [4, 5, 6]
print a, b
# Prints
#[4, 5, 6]
#[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
270 次 |
| 最近记录: |