【问题标题】:Just need help in python list value assignment [duplicate]只需要python列表值分配的帮助[重复]
【发布时间】:2021-10-26 12:21:44
【问题描述】:

参考以下代码

a1 = [['H', 'T'], ['T', 'T']]
print("a1 =",a1)
print("Making b1 copy of a1")
b1 = a1[:]
print("b1 = ",b1)
print("Changing one element of b1")
b1[1][1] = 'H'
print("b1 = ",b1)
print("a1 = ",a1)

这给出了输出

a1 = [['H', 'T'], ['T', 'T']]
Making b1 copy of a1
b1 =  [['H', 'T'], ['T', 'T']]
Changing one element of b1
b1 =  [['H', 'T'], ['T', 'H']]
a1 =  [['H', 'T'], ['T', 'H']]

当我通过切片创建 a1 的副本时,为什么要更改 b1 更改 a1?

【问题讨论】:

  • 因为切片是一个拷贝。
  • 你需要做一个深拷贝,试试这个,import copy 然后代替b1 = a1[:],做这个,b1 = copy.deepcopy(a1)。还有其他方法可以实现这一点。这是因为列表在 python 中的存储方式,当您创建副本时,只会创建指向前一个列表的指针。您正在修改指针指向的同一对象。您需要创建一个适当的副本。

标签: python list


【解决方案1】:

对列表进行切片不会给您提供硬拷贝或深拷贝。如果要复制列表,请参阅:https://docs.python.org/3/faq/programming.html#how-do-i-copy-an-object-in-python

【讨论】:

  • 请在链接中提供答案摘要(附sn-p、截图等)。链接并不总是可靠的。
【解决方案2】:

发生这种情况是因为您没有从嵌套列表创建副本。您需要嵌套副本:

b1 = [a[:] for a in a1]
# or
import copy
b1 = copy.deepcopy(a1)

完整代码:

# import copy
a1 = [['H', 'T'], ['T', 'T']]
print("a1 =",a1)
print("Making b1 copy of a1")
b1 = [a[:] for a in a1]
# b1 = copy.deepcopy(a1)
print("b1 = ",b1)
print("Changing one element of b1")
b1[1][1] = 'H'
print("b1 = ",b1)
print("a1 = ",a1)

输出:

a1 = [['H', 'T'], ['T', 'T']]
Making b1 copy of a1
b1 =  [['H', 'T'], ['T', 'T']]
Changing one element of b1
b1 =  [['H', 'T'], ['T', 'H']]
a1 =  [['H', 'T'], ['T', 'T']]

【讨论】:

  • @RonDsouza,如果我的回答对您有帮助,也请考虑投票(see How to upvote on Stack Overflow?),因为您在达到 15 个代表点后有权获得投票特权。请注意,您可以对所有有用的答案进行投票。
猜你喜欢
  • 2020-07-10
  • 2010-09-29
  • 2023-01-26
  • 2021-06-06
  • 2021-03-19
  • 2020-12-12
  • 1970-01-01
  • 2019-02-14
  • 1970-01-01
相关资源
最近更新 更多