为什么两个变量的值在Python中都会改变?

mea*_*mea 2 python variable-assignment del

我只有一小段代码,并且有一个很大的疑问。

s=['a','+','b']
s1=s
print s1
del s1[1]
print s1
print s
Run Code Online (Sandbox Code Playgroud)

输出是

value of s1 ['a', '+', 'b']
value of s1 ['a', 'b']
value of s ['a', 'b']
Run Code Online (Sandbox Code Playgroud)

为什么我单独修改s1时变量's'的值会改变?我怎样才能解决这个问题?

先感谢您 :)

vah*_*bdi 5

在第二行中,您将对s进行新引用

s1=s
Run Code Online (Sandbox Code Playgroud)

如果要使用其他变量,请使用slice operator

s1 = s[:]
Run Code Online (Sandbox Code Playgroud)

输出:

>>> s=['a','+','b']
>>> s1=s[:]
>>> print s1
['a', '+', 'b']
>>> del s1[1]
>>> print s1
['a', 'b']
>>> print s
['a', '+', 'b']
Run Code Online (Sandbox Code Playgroud)

这是您之前做过的事情:

>>> import sys
>>> s=['a','+','b']
>>> sys.getrefcount(s)
2
>>> s1 = s
>>> sys.getrefcount(s)
3
Run Code Online (Sandbox Code Playgroud)

你可以看到,引用计数s增加1

来自python 文档

(Python中的赋值语句不复制对象,它们在目标和对象之间创建绑定。)