【发布时间】:2021-02-19 18:39:31
【问题描述】:
为什么相等的行为不同?在 list 的情况下它给出 false 但在 string 的情况下它给出 true 并且在最后一种情况下它是奇怪的 False
list1 = [1, 2, 3]
list2 = list1[:]
print(id(list1))
print(id(list2))
print(list1 is list2)
print(id(list1) == id(list2))
140271225865864
140271225867080
假的
错误
list3="hello"
list4=list3[:]
print(id(list3))
print(id(list4))
print(list3 is list4)
140271226135360
140271226135360
真的
list5="hello"
list6 = ''.join(c for c in list5)
print(list5 is list6)
错误
【问题讨论】:
-
由于字符串是不可变的,因此浅拷贝返回相同的对象并不重要,这样可以节省进行真正拷贝的时间。不过,对于列表来说,这很重要,因为它们是可变的。
-
此外,由于可变性,
list1[:]必须创建一个新列表。由于str是不可变的,list3[:]可以返回相同的str,但我不知道有什么说它必须。 -
只是对此的后继怀疑 .. list4 = ''.join(c for c in list3) print(list4 is list3) .. 那么为什么这会给出 False 作为输出,因为这也会创建相同的字符串@schwobaseggl
标签: python python-3.x list