2

几天前我开始学习python(没有以前的编程经验或知识),目前我不明白以下事情:假设我有一个未排序的列表“b”,我想对一个列表“c”进行排序它看起来与列表“b”一模一样:

b = [4,3,1,2]
c=b
c.sort()

print b
print c

我发现 b 和 c 都是排序的: [1,2,3,4] [1,2,3,4]

为什么呢?

当我创建“b”列表的副本时,这个解决方案似乎非常有效:

b = [4,3,1,2]
c=b[:]
c.sort()

print b
print c

结果:[4,3,1,2] [1,2,3,4]

但是为什么第一个解决方案不起作用?

谢谢你。

4

3 回答 3

4

你似乎已经明白这c = bc = b[:]. 在第一种情况下c,引用与 相同的对象b。在后者中,它引用了b.

b.sort()因此,由于对 引用的列表进行排序b,当您检查c它时它也被排序 - 因为它是同一个对象,这不足为奇

将排序列表与原始列表分离的常用方法是

c = sorted(b)
于 2013-05-19T00:45:11.603 回答
2

因为在第一个解决方案中,b两者c都指向同一个对象。第二种解决方案中的切片创建了一个与旧对象具有相同内容的新对象。

于 2013-05-19T00:15:24.783 回答
0

在第一个示例中,您通过引用复制bc,这意味着无论何时对 进行任何更改(例如排序)b,它将应用于c,因为基本上它们都指向同一个对象。

在第二个示例中,您正在复制数组by value,而不是by reference在内存中创建一个全新的对象。因此,对其中一个所做的任何更改都不会应用于另一个。

于 2013-05-19T00:17:52.187 回答