update:
实际上存在复制字符串的方法。例如 ''.join(str)。
详见这篇文章:join()方法的神奇用处与Intern机制的软肋mp.weixin.qq.com
-------------------------以下是原回答
正想问同样的问题,发现有人问了。不过看到这么少人回答,还答非所问,就知道像我们这样敏锐的人还是太少了。。。
我先帮题主补充一下问题,这样读者才有正确思考的起点。
下面,先是一个很长的字符串 s ,问题是:怎么复制一份相同的字符串,使它的内存地址跟字符串 s 不同呢?
In [1]: s="Python猫阿萨德红安的厚爱的厚爱的厚爱和冬奥会到的哈等候你2131
...: 111111111111111111223232sdfhsjhfsdkjhfj"
In [2]: id(s)
Out[2]: 1981117228848
像下面这样赋值,sw 字符串的字面值与s相等,且内存地址不同,这样的字符串是满足的,但它不是在字符串s的基础上复制出来的,所以就不是这个问题的答案。
In [3]: sw="Python猫阿萨德红安的厚爱的厚爱的厚爱和冬奥会到的哈等候你213
...: 1111111111111111111223232sdfhsjhfsdkjhfj"
In [4]: id(sw)
Out[4]: 1981117230192
(注:这里回应下唯一稍微靠谱的回答者@hehe ,“无法构造出两个值完全相同的字符串对象”这个说法,只在短字符串时成立,值完全相同的长字符串对象可以存在多个。)
如果像下面这样呢?还是不对。因为ww跟s一样,只是变量名,是对最初的字符串变量的引用,一个字符串有两个引用,但字符串还是只有一份。也不是这个题目的答案。
In [5]: ww=s
In [6]: id(ww)
Out[6]: 1981117228848
字符串不具备“复制”的方法。下面这个例子表明,列表有复制的方法 copy(),但是字符串没有。
In [7]: l=[1,2]
In [8]: k=l.copy()
In [9]: id(l)
Out[9]: 1981117991112
In [10]: id(k)
Out[10]: 1981119441224
我还尝试了字符串切片的方法,同样没法做到复制。
In [11]: p=s[:]
In [12]: id(p)
Out[12]: 1981117228848
我最终的结论是,Python 的字符串不支持复制操作。
那么,原因是啥呢?我也猜这是出于节省内存的考虑。但是猜测不是求知的正确方式。所以,才有了一开始我说的想要问同样的问题。。。。我先回答这个问题的上半部分:Python中无法复制字符串。
待回答的下半部分问题是:为什么Python中不支持复制字符串?
补充,刚查到的资料:
这个回答的意思是,不支持字符串复制,可以使字典查找更快。