它复制一个列表对吗?但是在代码中,我正在查看x = x[:]
我不理解的代码。两个副本怎么能被称为同一个东西?
问问题
363 次
2 回答
6
首先计算右边的值,放入一个临时变量中,然后将 x 重新分配给临时变量。当然,你永远看不到它。
于 2012-04-22T23:51:06.883 回答
2
回答您的问题“[:] 如何在 python 中工作?” 在这个特定表达式的上下文中,它本身有点棘手
x = x[:]
就像说的那样,这不太可能发生a = a
。
你更有可能看到类似的东西
a = x[:]
简而言之,它会复制所引用的列表x
并将其分配给a
.
如果你只是做了
a = x
两个变量都指向同一个位置,对任何一个变量的任何更改都将反映在两者中。
如果您不使用冒号表示法,会发生以下情况,例如a = x
:
In [31]: x = range(5)
In [32]: a = x
In [33]: a
Out[33]: [0, 1, 2, 3, 4]
In [34]: x
Out[34]: [0, 1, 2, 3, 4]
In [35]: a[3] = 99 # I am making a change in a
In [36]: a
Out[36]: [0, 1, 2, 99, 4]
In [37]: x
Out[37]: [0, 1, 2, 99, 4] # but x changes too!
将此与a = x[:]
In [38]: x = range(5)
In [39]: a = x[:]
In [40]: a
Out[40]: [0, 1, 2, 3, 4]
In [41]: x
Out[41]: [0, 1, 2, 3, 4]
In [42]: a[3] = -99
In [43]: a
Out[43]: [0, 1, 2, -99, 4] # a changes
In [44]: x
Out[44]: [0, 1, 2, 3, 4] # x does not change
注意:@gnibbler 提供了一个简短而完整的示例(在评论下方),您可能会遇到该示例,x = x[:]
并且在该上下文中分配将起到有用的作用(尽管我们不知道您最初是在什么上下文中遇到的)。
于 2012-04-22T23:54:05.450 回答