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
?:)