b = a vs b =字符串列表中的[:]

时间:2010-08-12 08:29:21

标签: python

<{1>} -

中的

我总是可以检查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创建字符串的新副本?

2 个答案:

答案 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
>>>