Python中多目標賦值及共享引用的問題

2021-08-30 19:17:17 字數 1529 閱讀 4280

多目標賦值語句就是直接把所有提供的變數名都賦值給右側的物件。 

>>> a = b = c = "spam"    # 將字串"spam"同時賦值給a,b,c

>>> a,b,c

('spam', 'spam', 'spam')

>>>

上面的語句相當於下面的簡單賦值

>>> c = "spam"

>>> b = c

>>> a = b

>>> a, b, c

('spam', 'spam', 'spam')

>>>

在這裡只有乙個物件,由三個變數共享,全部指向記憶體內同乙個物件。這種賦值存在的問題就是:

i. 如果右邊的值是不可變物件,修改其中乙個變數,不影響其他變數

>>> a = b = 100   # 不可變物件

>>> b += 1 # 改變其中乙個值

>>> a, b # 不會影響另外變數的值

(100, 101)

>>>

ii. 如果右邊的值是可變物件,修改其中乙個變數,會影響其他變數

>>> a = b =       # 同時將可變物件,列表,賦值給a,b

>>> id(a);id(b) # 可以看出,兩個變數的id號是一樣的

37796680

37796680

>>> a,b # a,b兩個變數同時變化

([42], [42])

>>>

iii.要避免上面的問題,可以單獨賦值來避免

>>> a = 

>>> b =

>>> id(a);id(b) # 單獨賦值的話,兩者的id號不同

37796360

37811720

>>> a,b

(, [42])

>>>

iv. 或者使用深淺拷貝避免

>>> import copy

>>> a =

>>> b = copy.copy(a) # 通過淺拷貝來賦值

>>> id(a);id(b)

39263368

37796680

>>> a, b

(, [42])

>>>

iiv. 或者使用[:]來避免

>>> a = 

>>> b = a[:]

>>> a, b

(, )

>>> id(a),id(b)

(37796360, 37811720)

>>> a,b

(, [42])

>>>

多目標優化中pareto

pareto解 一般地,多目標規劃問題 multi objective programming,mop 可以描述成如下形式 pareto最優解,也稱為帕累託效率 pareto efficiency 是指資源分配的一種理想狀態,假定固有的一群人和可分配的資源,從一種分配狀態到另一種狀態的變化中,在沒有...

多目標跟蹤中SORT演算法的理解

多目標跟蹤中sort演算法的理解 在跟蹤之前,對所有目標已經完成檢測,實現了特徵建模過程。1.第一幀進來時,以檢測到的目標初始化並建立新的 標註id。2.後面幀進來時,先到卡爾曼濾波器中得到由前面幀box產生的狀態 和協方差 求 所有目標狀態 與本幀檢測的box的iou,通過匈牙利指派演算法得到io...

Python增強賦值及共享引用注意事項

python中的增強賦值是從c語言中借鑑出來的,所以這些格式的用法大多和c一致,本身就是對表示式的簡寫,即二元表示式和賦值語句的結合,比如a b和a a b就是一致的,比如還有以下的增強賦值語句。a b a b a b a b a b a b a b a b a b a b a b a b 即增強賦...