试想:会不会i只是复制foo[0]的值,于是用print(i is foo[0])看,结果输出true,这说明它们指向同一个对象。
i 不是复制 foo[0] 的值
你也用 is 语句试过了,i 就是 f[0]
那为什么 += 1 之后就变了呢?这个和值的类型有关。
简单来讲,就是整型是不可变的,做了 += 1 的操作自然就是另一个整型对象了。
Python 中数值类型、字符串、元组都是常见的不可变类型。
>>> l = "This is a test case.".split()
>>> l
['This', 'is', 'a', 'test', 'case.']
>>> for i, s in enumerate(l):
... print(s is l[i])
... s += "-copy"
... print(s is l[i])
...
True
False
True
False
True
False
True
False
True
False
>>> l2 = [[1, 2, 3], [4, 5, 6]]
>>> for i, li in enumerate(l2):
... print(li is l2[i])
... li += [0] # 注意,这里不是说不论怎样的运算都不会变,而是 += 这个运算,你可以改为 li = li + [0] 试试
... print(li is l2[i])
True
True
True
True
>>> l2
[[1, 2, 3, 0], [4, 5, 6, 0]]
>>> l3 = [(1, 2, 3), (4, 5, 6)]
>>> for i, li in enumerate(l3):
... print(li is l3[i])
... li += (0, )
... print(li is l3[i])
True
False
True
False