Python中如何複製乙個值或字串?

時間 2021-06-02 22:33:07

1樓:豌豆花下貓

update:

實際上存在複製字串的方法。例如 ''.join(str)。

詳見這篇文章:

join()方法的神奇用處與Intern機制的軟肋

以下是原回答

正想問同樣的問題,發現有人問了。不過看到這麼少人回答,還答非所問,就知道像我們這樣敏銳的人還是太少了。。。

我先幫題主補充一下問題,這樣讀者才有正確思考的起點。

下面,先是乙個很長的字串 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中不支援複製字串?

補充,剛查到的資料:

翻譯:https://

codeday.me/bug/20171004

/80193.html

這個回答的意思是,不支援字串複製,可以使字典查詢更快。

2樓:hehe

字串是不可變物件。在同乙個程序中,無法構造出兩個值完全相同的字串物件(注意,是物件,不是引用,引用可以有多個。)。

即使使用copy模組也無法構造。Python這麼設計是出於節約記憶體的考慮。

3樓:

不知道是不是你寫得不清楚

str1=「55555」

str2=str1

str1="@@@@@@"

print str1

print str2

本身就不會影響啊,或者我太低端了,不太理解你的問題。還是匿了吧。

Python 中如何同時 import 乙個包的兩個版本?

意群 續樓上,假設當前目錄為 zhangbin from a import c as a cfrom b import c as b c然後分別呼叫 a c.hello b c.hello IAMSK 比如 Users zhangbin a 和 Users zhangbin b 下各有乙個 lib ...

如何在python中,輸入乙個列表(n個1 3的矩陣),使x1 n1 x22 n22

王歡 既然是 的矩陣,完全可以用 numpy 來完成。而且,個人理解,在絕大多數情況下其實並不需要把矩陣中的每個元素都賦值對應到新的單個變數上。也就是說你的需求 可能並不一定很高效。import numpy asnp 從 python list 構建 n x 3 陣列 a np.array list...

python中字典如何找出最值,以及找到最值後返回對應的key

2gua 來乙個,比較靈活的 from functools import reduce data def refn acc elem key lst elem fork,v inlst if k acc fname return acc ifacc val velse return accdef m...