【问题标题】:Python temp arrays sort [duplicate]Python临时数组排序[重复]
【发布时间】:2020-09-08 08:21:54
【问题描述】:

为什么要这样输出?

    years = [1998,2000,1998,1987]
    
    x = years
    x.sort()
    
    print(x)
    print(years) #why not [1998,2000,1998,1987]

输出:

[1987, 1998, 1998, 2000]
[1987, 1998, 1998, 2000]

【问题讨论】:

  • 这能回答你的问题吗? stackoverflow.com/questions/2612802/…
  • x = years 行将x 设置为指向years 列表,因此从该点开始它们指向同一个对象(直到您更改它)。所以,当你排序时,你对同一个对象进行排序,当你打印这些变量时,结果是相同的排序数组。
  • 可以打印(id(x)),print(id(years)),看地址
  • 您也可以使用 x = sorted(years) 因为这会创建一个新的排序列表,而保留原始列表
  • 强制链接到Ned Batchelder

标签: python arrays python-3.x sorting


【解决方案1】:

当您将它分配给另一个变量时,对该列表的引用被分配给另一个变量,因此它们都分配给同一个列表,然后当您更改列表时,它们都将被更改。 您可以使用copy 来防止这种情况发生,如下所示:

from copy import copy

x = copy(years)

x = years[:]

【讨论】:

  • 由于 op 想要在复制后立即对列表进行排序,我认为值得一提的是 x = sorted(years) 作为另一种选择。
  • @Stef 绝对。
【解决方案2】:

你复制位置 使用:

x=years[:]

这会起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-27
    • 2013-07-11
    • 2021-07-23
    • 1970-01-01
    • 2019-01-10
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    相关资源
    最近更新 更多