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这么设计是出于节约内存的考虑。
推荐阅读
- 聪明人养花,这3种“花”怎样也要养一盆,每年能省不少医药费
- 互联网怎样解决“家政服务上门速度慢”的问题
- 怎样看待从1月8号起,QQ钱包开始提现收费
- 银行it人怎样转型
- 汽车|冬天怎样让车内温度快速升高?座椅加热的最佳使用方式二,外循环的作用总结
- 怎样进入通信行业
- 怎样评价扶他柠檬茶的小说《云养汉》的结尾
- 中国版Evan能火吗美国9岁男童录制评测玩具视频年入800万,中国能否复制成功
- 怎样成为一名合格的Python程序员?
- 怎样评价华为、诺基亚、中兴中标中国移动高端路由交换设备扩容集采
