Skip to main content
 首页 » 编程设计

python之字符串赋值

2025年05月04日22zfyouxi

我看了一下 python 代码,其中字符串变量赋值如下所示:

var1 = var2[:] 

我只是想知道有什么区别:

var1 = var2 

这是我的实验:

>>> original = "some text" 
>>> copy1 = original 
>>> copy2 = original[:] 
>>> original = "another text" 
>>> copy1 
'some text' 
>>> copy2 
'some text' 

更新:

这是完整的 code .此代码搜索替换密码的 key 。 如果我删除“[:]”,此代码将运行得很慢。

请您参考如下方法:

由于interning ,两者之间通常(在生成的对象中)没有区别。我们可以使用 is 检查两个变量是否指向同一个对象运算符,与 == 相反运算符检查对象的实际内存地址是否相同:

>>> a = "foo" 
>>> b = a 
>>> a is b 
True 
>>> c = a[:] 
>>> a is c 
True 

Interning 是一种节省内存和加速不可变对象(immutable对象)比较的机制,它的工作原理是这样的:在创建新的不可变对象(immutable对象)之前,python 检查是否已经存在相同的不可变对象(immutable对象)。如果是这样,它只是使用对现有对象的引用。它可以无害地做到这一点,因为没有办法改变不可变的。这就是为什么即使是两个独立创建的字符串也可能指向同一个对象:

>>> a = "foo" 
>>> b = "foo" 
>>> a is b 
True 

但是如果 var2是一些可变的顺序对象,比如 list , 然后 var2[:]将是 var2 的浅拷贝,这样对其中一个进行更改不会影响另一个。

>>> a = list("foo") 
>>> a 
['f', 'o', 'o'] 
>>> b = a 
>>> b is a 
True 
>>> c = a[:] 
>>> c is a 
False 
>>> b.pop() 
'o' 
>>> a 
['f', 'o'] 
>>> b 
['f', 'o'] 
>>> c 
['f', 'o', 'o'] 

要了解全貌,请阅读 Ashwini Chaudharys 的回答。