python - 为什么两个变量的值在 Python 中都会发生变化?

标签 python variable-assignment del

<分区>

我有一小段代码和一个很大的疑问。

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/

相关文章:

java - 分配一个变量,实际发生了什么,Java

python - Python 中的切片列表混淆

python - __del__ 方法在不期望的情况下在 python 中被调用

javascript - SQLFORM 翻译的 Web2py 问题

python - Pyspark:按键聚合 RDD,然后也按键对元组值列表求和

python - 使用 Pyqt Print 支持但出现错误 "Object is not callable"

Python del 语句

python - 如何让 flask 发送文件然后重定向?

c++ - 相当于三元赋值的 "written out"是什么?

vb6 - Visual Basic 6 一条语句中的多个变量赋值