4

它复制一个列表对吗?但是在代码中,我正在查看x = x[:]我不理解的代码。两个副本怎么能被称为同一个东西?

4

2 回答 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 回答