+=python中的运算符似乎在列表上意外运行.谁能告诉我这里发生了什么?
class foo:
bar = []
def __init__(self,x):
self.bar += [x]
class foo2:
bar = []
def __init__(self,x):
self.bar = self.bar + [x]
f = foo(1)
g = foo(2)
print f.bar
print g.bar
f.bar += [3]
print f.bar
print g.bar
f.bar = f.bar + [4]
print f.bar
print g.bar
f = foo2(1)
g = foo2(2)
print f.bar
print g.bar
Run Code Online (Sandbox Code Playgroud)
OUTPUT
[1, 2]
[1, 2]
[1, 2, 3]
[1, 2, 3]
[1, 2, 3, 4]
[1, 2, 3]
[1]
[2] …Run Code Online (Sandbox Code Playgroud) 为什么这两个操作(append()分别+)给出不同的结果?
>>> c = [1, 2, 3]
>>> c
[1, 2, 3]
>>> c += c
>>> c
[1, 2, 3, 1, 2, 3]
>>> c = [1, 2, 3]
>>> c.append(c)
>>> c
[1, 2, 3, [...]]
>>>
Run Code Online (Sandbox Code Playgroud)
在最后一种情况下,实际上存在无限递归.c[-1]并且c是一样的.为什么它与+操作不同?
我注意到在尝试p= p+i不同的列表时, p += i
例如:
test = [0, 1, 2, 3,]
p = test
test1 = [8]
p = p + test1
print test
Run Code Online (Sandbox Code Playgroud)
在上面的代码中test打印出原始值[0, 1, 2, 3,]
但是如果我在下面p = p + test1用p += test1As 切换
test = [0, 1, 2, 3,]
p = test
test1 = [8]
p += test1
print test
Run Code Online (Sandbox Code Playgroud)
test 现在等于 [0, 1, 2, 3, 8]
价值不同的原因是什么?
我试图将我的解决方案提交给 leetcode 问题,其中x和y是列表和使用
x = x + y
Run Code Online (Sandbox Code Playgroud)
给我一个时间超过限制 而使用
x += y
Run Code Online (Sandbox Code Playgroud)
通过了测试用例并给了我AC。
两者之间的执行时间差异以及两者执行方式的差异是多少?