Python中怎样复制一个值或字符串

1.python里的str是不可变对象,因此不存在修改一个字符串这个说法,任何对字符串的运算都会产生一个新字符串作为结果。2.基于1,你可以在任何时候不用任何操作直接给等号(仅限于不可变类型,例如str、unicode、int、float……)3. 猜测你是被list之类容器在容器嵌套时的情况搞晕了。容器中存储的是引用且容器是可变对象,引用不可变对象与1相同,但容器嵌套时,外层引用的还是容器,对内层操作不会产生新容器对象,所以会出现好几个都一起变的情况。因此记得对容器嵌套情况使用列表解析对形式构造,让外层容器里的每一个引用都指向不同的内层容器。如果不明白什么是容器,什么是不可变对象,什么是可变对象,建议参考如Java、C#、JS中的概念理解。
■网友
update:
实际上存在复制字符串的方法。例如 \u0026#39;\u0026#39;.join(str)。
详见这篇文章:
join()方法的神奇用处与Intern机制的软肋-------------------------以下是原回答

正想问同样的问题,发现有人问了。不过看到这么少人回答,还答非所问,就知道像我们这样敏锐的人还是太少了。。。

我先帮题主补充一下问题,这样读者才有正确思考的起点。

下面,先是一个很长的字符串 s ,问题是:怎么复制一份相同的字符串,使它的内存地址跟字符串 s 不同呢?
In : s="Python猫阿萨德红安的厚爱的厚爱的厚爱和冬奥会到的哈等候你2131 ...: 111111111111111111223232sdfhsjhfsdkjhfj"In : id(s)Out: 1981117228848
像下面这样赋值,sw 字符串的字面值与s相等,且内存地址不同,这样的字符串是满足的,但它不是在字符串s的基础上复制出来的,所以就不是这个问题的答案。
In : sw="Python猫阿萨德红安的厚爱的厚爱的厚爱和冬奥会到的哈等候你213 ...: 1111111111111111111223232sdfhsjhfsdkjhfj"In : id(sw)Out: 1981117230192(注:这里回应下唯一稍微靠谱的回答者@hehe ,“无法构造出两个值完全相同的字符串对象”这个说法,只在短字符串时成立,值完全相同的长字符串对象可以存在多个。)

如果像下面这样呢?还是不对。因为ww跟s一样,只是变量名,是对最初的字符串变量的引用,一个字符串有两个引用,但字符串还是只有一份。也不是这个题目的答案。
In : ww=sIn : id(ww)Out: 1981117228848
字符串不具备“复制”的方法。下面这个例子表明,列表有复制的方法 copy(),但是字符串没有。
In : l=In : k=l.copy()In : id(l)Out: 1981117991112In : id(k)Out: 1981119441224
我还尝试了字符串切片的方法,同样没法做到复制。
In : p=sIn : id(p)Out: 1981117228848
我最终的结论是,Python 的字符串不支持复制操作。
那么,原因是啥呢?我也猜这是出于节省内存的考虑。但是猜测不是求知的正确方式。所以,才有了一开始我说的想要问同样的问题。。。。我先回答这个问题的上半部分:Python中无法复制字符串。

待回答的下半部分问题是:为什么Python中不支持复制字符串?

【Python中怎样复制一个值或字符串】 补充,刚查到的资料:
https://stackoverflow.com/questions/24804453/how-can-i-copy-a-python-string
翻译:https://codeday.me/bug/20171004/80193.html
这个回答的意思是,不支持字符串复制,可以使字典查找更快。

■网友
str是不可修改的,你没有正常办法去修改它的内容
■网友
字符串是不可变对象。在同一个进程中,无法构造出两个值完全相同的字符串对象(注意,是对象,不是引用,引用可以有多个。)。即使使用copy模块也无法构造。Python这么设计是出于节约内存的考虑。


推荐阅读