Python 当我知道我不应该';我不能

Python 当我知道我不应该';我不能,python,tuples,Python,Tuples,这是说: 不能向元组添加元素 但看起来好像我被允许这样做。我的代码: from string import find def subStringMatchExact(target, key): t = (99,) location = find(target, key) while location != -1 t += (location,) # Why is this allowed? location = find(targe

这是说:

不能向元组添加元素

但看起来好像我被允许这样做。我的代码:

from string import find

def subStringMatchExact(target, key):
    t = (99,)
    location = find(target, key)
    while location != -1
        t += (location,)    # Why is this allowed?
        location = find(target, key, location + 1)
    return t

print subStringMatchExact("atgacatgcacaagtatgcat", "tg")
输出:

(99, 1, 6, 16)

这让我相信,当我初始化
t
时,我实际上并没有创建元组。有人能帮我理解吗?

我猜您只是在创建一个元组的新实例并将其分配给
t
。它实际上并没有修改原始的
t
对象

您正在将两个元组连接到一个新元组中。 您没有修改原始文件

> a = (1,)
> b = a
> b == a
True
> a += (2,)
> b == a
False

t+=(location,)
t=t+(location,)
的简写,因此您正在创建一个新的元组实例,并在循环中每次将其分配给t。

请注意,
+=
实际上是对某些其他类型(包括列表)的就地修改。感谢您的澄清。在元组中使用+=和在列表中使用+=之间的区别我很难理解。事实上,在使用列表时,我倾向于使用l.append()或l.extend()太棒了,谢谢。这应该是显而易见的吗?我的意思是,我猜它应该是基于元组对象的性质,但它看起来很像是在向现有元组添加元素。我需要摆脱这种心态:)@Corey你可以测试自己。例如,在指令
t+=(位置,)#为什么允许这样做?
之后添加一行
print id(t)
,您将看到t依次指向不同的对象。
tuple
是一种不可变的类型,一旦创建,就永远不会更改。因此,您可以猜测这种行为。
字符串是不可变类型,也是一个
元组
,所以您为什么不想知道
s1+=s2
?:)