我总是可以检查Lists
是否指向同一个对象而b=a
创建了另一个副本。
c=a[:]
在>>> a = [1,2,3,4,5]
>>> b = a
>>> c = a[:]
>>> a[0] = 10
>>> b
[10, 2, 3, 4, 5]
>>> c
[1, 2, 3, 4, 5]
-
我无法对原始的不可变字符串进行更改。如何确认Strings
使b=a
指向同一个对象,而b
创建字符串的新副本?
答案 0 :(得分:2)
您可以使用is
运算符。
a = 'aaaaa'
b = 'bbbbb'
print a is b
a = b
print a is b
c = a[:]
print c is a
这是有效的,因为a is b
当且仅当id(a) == id(b)
。至少在CPython中,id(foo)
只是存储foo
的内存地址。因此,如果foo is bar
,则foo和bar实际上是同一个对象。值得注意的是
a = 'aaaaa'
b = 'aaaaa'
a is b
是True
。这是因为python实习(至少大多数)字符串,因此它不会浪费存储相同字符串两次的内存,更重要的是可以通过比较C实现中的固定长度指针而不是逐字节比较字符串来比较字符串。
答案 1 :(得分:1)
仍然可以将相同的字符串存储在多个位置 - 请参阅此示例。
>>> a="aaaaa"
>>> b=a[:]
>>> b is a
True
>>> b=a[:-1]+a[-1]
>>> b is a
False
>>> b==a
True
>>>