記錄Python的字典複製的坑

2021-10-07 04:10:36 字數 846 閱讀 7012

筆者之前寫過一段介面的測試**,其中有乙個函式是替換字典中的值來做不同的入參處理,結果發現乙個bug,執行完一次後發現請求結果跟預期的不一樣,列印log發現第二次請求時的入參跟第二次的入參不一樣,最後發現是因為自己字典賦值導致的bug,具體**如下

def

copy_demo

(a):

c = a

c['name']=

"hello"

c['age']=

"18"

c['***'

]= random.randint(1,

10)return c

測試**

val =

for i in

range(0

,3):

result_val = copy_demo(val)

print

("result_val的值是"

.format

(result_val)

)print

("val的值是"

.format

(val)

)

3次的輸出結果分別是:

result_val的值是

val的值是

result_val的值是

val的值是

result_val的值是

val的值是

通過輸出我們可以發現val的值被改變了,每次入參都發生了變化!!!

出現這個問題的原因就在於我只進行了賦值操作,這樣其實a和c指向的是同乙個位址,乙個變化了,另乙個自然也跟著變,要解決這個問題,不能用賦值,只能用copy.deepcopy()來解決

python 字典的淺複製與深複製

copy 方法返回乙個新字典,包含的鍵值對與原來的字典相同,這個方法執行的是淺複製,因為值本身是原件,而非副本 如上圖所示,當替換副本中的值時,原件不受影響。然而修改副本中的值,原件也將發生變化,因為這是就地修改而不是替換,原件指向的也是被修改的值。即淺複製的副本發生替換時,原件不受影響,發生修改時...

Python中字典的複製和引用

author lxp 自定義函式 a p2 def myfunc pinfo print print pinfo pinfo 33 pinfo 33 0.0088 print pinfo pinfo 33 0.0044 print pinfo print myp p a print myp.ps m...

python中字典的排序和複製

在開發過程中通常要對字典進行排序,複製等操作,和列表一樣,字典的排序也採用sorted 函式,字典的複製除了可以使用update 函式外,還可以使用copy 函式,但是得注意二者之間的區別。字典的排序 先來演示字典的排序函式sort 的使用 print dict 按照key進行排序。items可以用...