本文目錄一覽:
- 1、Python中的賦值,淺拷貝和深拷貝的區別
- 2、python 調用C代碼獲取數據,C代碼要求1個結構參數, 其中有項目是指向緩衝區的指針,如何實現參數賦值?
- 3、Python變量賦值的秘密分享
- 4、python中的賦值
Python中的賦值,淺拷貝和深拷貝的區別
賦值(=),就是創建了對象的一個新的引用,修改其中任意一個變量都會影響到另一個。
淺拷貝:創建一個新的對象,但它包含的是對原始對象中包含項的引用(如果用引用的方式修改其中一個對象,另外一個也會修改改變){1,完全切片方法;2,工廠函數,如list();3,copy模塊的copy()函數}
深拷貝:創建一個新的對象,並且遞歸的複製它所包含的對象(修改其中一個,另外一個不會改變){copy模塊的deep.deepcopy()函數}
python 調用C代碼獲取數據,C代碼要求1個結構參數, 其中有項目是指向緩衝區的指針,如何實現參數賦值?
class stdata(Structure):
_fields_ = [(‘pBuf’, c_char_p), (‘buflen’, c_int)]
N=100
buf = create_string_buffer(N)
d = stdata()
d.buflen = N
d.pBuf = cast(buf, c_char_p)
n = CallMyCFunc_GetData(byref(d))
關鍵在於create_string_buffer創建可寫buffer;cast轉換為char*類型。
Python變量賦值的秘密分享
Python變量賦值的秘密分享
在Python中,我們令一個變量等於另外一個變量時,並不是把值傳遞給它,而是直接把指向的地址更改了。我們想要查看一個變量在內存中的地址,可以通過id(變量) 來查看。我們通過一個小例子來看看這個有趣的過程。
x = 12
y= 13
id(x)
id(y)
x = y
id(x)
id(y)
首先給x變量賦值為12,y變量賦值為13,我們用id(變量)分別查看x和y在內存中的位置。上面顯示分別為1865402384和1865402416。然後我們令x = y後,再查看一下它們在內存中的位置,發現x 和 y都指向了1865402416。由此可見,在python中,我們賦值的方式和C語言有所不同,c語言直接更改x那塊內存裡面的值,而Python直接改變x的指向,這讓我想起了指針。
我們接着嘗試一下,繼續在這裡輸入下面的代碼
y = 12
id(y)
1865402384
天!發生了什麼??y在內存中的地址又變成1865402384了,準確說,y又指向了1865402384這塊內存區域了。這樣一看,和C語言的指針還真的很像呢。
python中的賦值
如果是簡單的int 之類的賦值 樓上說的是對的
但是 如果 a 是某個對象 比如是一個list 就是另外一個情況了
x=a 開闢了兩塊內存 一個存X一個存a
y=a 同上
而恰好 x y 指向內存中的值相等 僅此而已 改變x 根本不會影響到y
但是 x=a y=x 就不一樣了
這裡y 創建了x的一個淺複製 實際是指向的同一塊內存
舉個栗子:
x=[1,2,3]
y=[1,2,3]
x[0]=4
print x 是 [4,2,3]
print y 是[1,2,3]
但是 如果是
x=[1,2,3]
y=x
x[0]=4
print x 是[4,2,3]
print y 也是[4,2,3] 因為 x y 指向的是同一塊內存
原創文章,作者:XXVUY,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/130707.html