gpt4 book ai didi

python - 字符串赋值

转载 作者:太空宇宙 更新时间:2023-11-04 07:10:28 30 4
gpt4 key购买 nike

我看了一下 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 的回答。

关于python - 字符串赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13246941/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com