参考或复制

Ale*_*der 1 python python-3.x

我刚开始使用Python 3.在Python书中,我读到可以强制解释器创建实例的副本,而不是使用切片符号创建引用.

这应该创建对s1的现有实例的引用:

s1 = "Test"
s2 = s1
print(s1 == s2)
print(s1 is s2)
Run Code Online (Sandbox Code Playgroud)

这应该创建一个新实例:

s1 = "Test"
s2 = s1[:]
print(s1 == s2)
print(s1 is s2)
Run Code Online (Sandbox Code Playgroud)

运行上面的示例时,两者都返回相同的结果,即对s1的引用.sombody可以解释为什么它不像书中描述的那样工作?这是我的错误,还是书中的错误?

Dro*_*ggl 7

这适用于可变数据类型,例如列表(即按预期工作s1 = [1,2,3]).

但是,字符串以及python中的元组都是不可变的(意味着它们无法更改,您只能创建新实例).python解释器没有理由创建这样的对象的副本,因为你不能通过s1影响s2,反之亦然,你只能让s1或s2指向不同的字符串.