【发布时间】:2021-02-07 22:17:06
【问题描述】:
我喜欢通过 pythoninstitute.org 的课程材料学习 Python,其中一个测验包括:
l1 = ["A", "B", "C"]
l2 = l1
l3 = l2
del l1[0]
del l2[:]
print(l3)
我期待['B'。 'C'] 作为 print(l3) 的结果,同时正确的结果是 []。
我不明白为什么。你能给我解释一下吗?
为了得到我期望的结果,我必须编写如下代码:
l1 = ["A", "B", "C"]
l2 = l1
l3 = l2
del l1[0]
l4 = l2[:]
del l4
print(l3)
你能解释一下这两个sn-p的区别吗?
【问题讨论】:
-
l3 = l2不复制l2,l2 = l1也不复制l1。 -
如果您查找
pass by reference versus pass by value,您将能够更直观地理解这一点。尽管这里我们没有使用函数,但想法是一样的。作为一般规则,可以这样看待它 - 因为事先不知道集合的大小,编程语言通常会处理原始集合的地址而不是复制它。如果您将 java 中的数组分配给三个变量,您会看到完全相同的行为。