<分区>
我有一小段代码和一个很大的疑问。
s=['a','+','b']
s1=s
print s1
del s1[1]
print s1
print s
输出是
value of s1 ['a', '+', 'b']
value of s1 ['a', 'b']
value of s ['a', 'b']
当我单独修改 s1 时,为什么变量 's' 的值会发生变化?我该如何解决这个问题?
提前谢谢你:)
<分区>
我有一小段代码和一个很大的疑问。
s=['a','+','b']
s1=s
print s1
del s1[1]
print s1
print s
输出是
value of s1 ['a', '+', 'b']
value of s1 ['a', 'b']
value of s ['a', 'b']
当我单独修改 s1 时,为什么变量 's' 的值会发生变化?我该如何解决这个问题?
提前谢谢你:)
最佳答案
在你的第二行中,你正在对 s 进行新的引用
s1=s
如果你想要不同的变量使用切片运算符
:
s1 = s[:]
输出:
>>> s=['a','+','b']
>>> s1=s[:]
>>> print s1
['a', '+', 'b']
>>> del s1[1]
>>> print s1
['a', 'b']
>>> print s
['a', '+', 'b']
这是你之前做过的:
>>> import sys
>>> s=['a','+','b']
>>> sys.getrefcount(s)
2
>>> s1 = s
>>> sys.getrefcount(s)
3
你可以看到reference count s
增加 1
来自 python docs
(Assignment statements in Python do not copy objects, they create bindings between a target and an object.).
关于python - 为什么两个变量的值在 Python 中都会发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21983014/