【问题标题】:What does [[]]*2 do in python?[[]]*2 在 python 中做了什么?
【发布时间】:2011-03-10 21:56:08
【问题描述】:
A = [[]]*2

A[0].append("a")
A[1].append("b")

B = [[], []]

B[0].append("a")
B[1].append("b")

print "A: "+ str(A)
print "B: "+ str(B)

产量:

A: [['a', 'b'], ['a', 'b']]
B: [['a'], ['b']]

人们会期望 A 列表与 B 列表相同,但事实并非如此,两个 append 语句都应用于 A[0] 和 A[1]。

为什么?

【问题讨论】:

  • 在这个线程中有一个非常好的解释 Python 的 * 运算符用于列表:stackoverflow.com/questions/974931/…
  • @S. Lott:对我来说似乎很清楚:两个非常相似的形式,[[]]*2 和 [[],[]] 在以相同方式操作时会产生非常不同的结果。为什么?

标签: python


【解决方案1】:

A = [[]]*2 创建一个包含 2 个相同元素的列表:[[],[]]。 元素是完全相同的列表。 所以

A[0].append("a")
A[1].append("b")

"a""b" 附加到同一个列表中。

B = [[], []] 创建一个包含 2 个不同元素的列表。

In [220]: A=[[]]*2

In [221]: A
Out[221]: [[], []]

这说明A的两个元素是相同的:

In [223]: id(A[0])==id(A[1])
Out[223]: True

In [224]: B=[[],[]]

这说明B的两个元素是不同的对象。

In [225]: id(B[0])==id(B[1])
Out[225]: False

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-13
    • 2020-10-13
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 2013-07-09
    • 2011-06-18
    • 2020-05-23
    相关资源
    最近更新 更多