正在加载...

复制

bag.copy() 把这一刻 bag 里的值取出来,放进一份新列表。现在 bag 里先是 tea,然后是 water,所以新列表里也是 tea,然后 water。名字 other 就是这份新列表。other 并不是 bag。

在任何替换之前,other 的位置 0 是 tea,位置 1 是 water。长度是 2。这份复制是那一刻的样子。之后它不再跟着 bag 变。

bag[0] = "soup" 只在 bag 里面把 tea 换成 soup。other 仍从 tea 开始,water 还在两份列表的位置 1。两份的长度都还是 2。后来的这次替换,复制那一份收不进去。

soup 进不了复制

python
bag = ["tea", "water"]
other = bag.copy()
bag[0] = "soup"

print(bag)
print(other)

第一行是 soup,然后 water。第二行是 tea,然后 water。soup 只在 bag 里。tea 仍是 other 的第一个。print 会连同方括号把每一份列表写出来,两份就并排看得见。

反过来也一样。other[1] = "bread" 只会把 bread 放进 other。bag 的位置 1 仍是 water。这个程序不走那一步。它只在复制之后改 bag。

bag[:] 也会做出一份装着同样值的新列表。这是整份列表的一段,结果和 bag 分开。other = bag 不是复制。两个名字是同一份列表,所以后来的替换在两个名字上都能看见。

📊 三种写法

写法 得到什么
bag.copy() 一份装着此刻这些值的新列表
bag[:] 一份装着同样值的新列表
other = bag 不是新列表;两个名字是同一份

留不住 tea 的那个名字

如果写成 other = bag,再写 bag[0] = "soup",other 也会显示 soup。当时并没有第二份列表把 tea 留住。上面的程序用的是 copy(),所以 other 仍是 tea,然后 water。

下一页把值排成一个顺序。这一页不改顺序。other 里 tea 仍在 water 前面,因为复制的时候就是这个顺序。bag 里 soup 排在最前,只是因为复制之后你换了位置 0。

哪一边留在了外面

  1. 程序第一行写出什么,第二行又写出什么?
  2. 程序之后,other 的第一个值是什么?
  3. 如果接着把 other 的位置 1 改成 bread,bag 的位置 1 还留下什么?
  4. other = bag 做了哪一件 copy() 不做的事?

tea 留在复制里

屏幕上是 soup,然后 water,接着是 tea,然后 water。other 仍从 tea 开始。两份长度都是 2。在 other 里放 bread,bag 的位置 1 仍是 water。other = bag 是同一份列表,soup 就会在两个名字上出现。bag[:] 是另一份装着同样值的新列表。下一页把值排顺序。它不做这次复制。

🧠 测试您的知识

准备开始

测试您的知识

通过这个互动测验挑战自己,看看你对这个主题的理解程度如何

❓
6
问题
🎯
70%
及格要求
♾️
∞
时间
🔄
∞
尝试次数

📝 说明

  • 仔细阅读每个问题
  • 为每个问题选择最佳答案
  • 您可以随时重新参加测验
  • 您的进度将显示在顶部