ML崗位面試:10.11下午—上海某公司算法崗位(偏機器學(xué)習(xí),互聯(lián)網(wǎng)數(shù)字行業(yè))技術(shù)面試考點之XGBoost的特點、python的可變不可變的數(shù)據(jù)類型,、賦值淺拷貝深拷貝區(qū)別
Interview:算法崗位面試—10.11下午—上海某公司算法崗位(偏機器學(xué)習(xí),互聯(lián)網(wǎng)數(shù)字行業(yè))技術(shù)面試考點之XGBoost的特點,、python的可變不可變的數(shù)據(jù)類型、賦值淺拷貝深拷貝區(qū)別
導(dǎo)讀:其實,考察的知識點,博主都做過,但是,emmm,這些知識點,在我寫代碼中,幾乎不會用到,so,會遺忘,。所以,還需要下功夫,去多回憶回憶啦,。
XGBoost的特點
1、XGBoost的損失函數(shù)
往期文章:ML之XGBoost:XGBoost算法模型(相關(guān)配圖)的簡介(XGBoost并行處理),、關(guān)鍵思路,、代碼實現(xiàn)(目標函數(shù)/評價函數(shù))、安裝,、使用方法,、案例應(yīng)用之詳細攻略
Python語言基礎(chǔ)知識點考察
1、可變不可變的數(shù)據(jù)類型
python中主要有6種標準數(shù)據(jù)類型,分為可變和不可變兩類,。
不可變類型:該數(shù)據(jù)類型對象所指定內(nèi)存中的值不可以被改變,。
(1)、在改變某個對象的值時,由于其內(nèi)存中的值不可以被改變,所以,會把原來的值復(fù)制一份再進行改變,這樣就會計算機會開辟一段新的內(nèi)存空間來存儲新的值,。
可變類型:該數(shù)據(jù)類型的對象所指定的地址上面的值可以被改變,。
(1)、變量被改變后,其所指向的內(nèi)存地址上面的值,直接被改變,沒有發(fā)生復(fù)制行為,也沒有發(fā)生開辟新的內(nèi)存地址行為,不會重新開辟空間,。
不可變類型—非嵌套數(shù)據(jù) | 可變類型—可嵌套數(shù)據(jù) |
Number數(shù)字 String字符串 Tuple元組 | List列表 Dictionary字典 Set集合 |
結(jié)合拷貝 例子:a = 521 copy.copy 和 copy.deepcopy 沒有區(qū)別,都會開辟新空間存儲數(shù)據(jù),。 | 結(jié)合拷貝 例子:a = [[521], {'521':521}] copy.copy沒有辦法保證數(shù)據(jù)的獨立性,拷貝第一層的引用。 copy.deepcopy完全拷貝所有的層級,都會有自己的空間,。 |
2,、賦值、淺拷貝,、深拷貝區(qū)別
? ? ? ? 首先,需要明確一點,淺拷貝和深拷貝之間的區(qū)別只適用于容器對象(包含其他對象的對象,如列表或類實例),。對于非容器對象沒有區(qū)別,都是對象拷貝,相當于重新賦值,生成一個新的對象,。
敲重點,面試時,下邊三句回答即可!
- 簡單的來說,在有指針的情況下,淺拷貝只是增加了一個指針指向已經(jīng)存在的內(nèi)存。
- 深拷貝就是增加一個指針并且申請一個新的內(nèi)存,使這個增加的指針指向這個新的內(nèi)存,。
- 應(yīng)用copy.copy淺拷貝,、copy.deepcopy深拷貝功能的時候,會根據(jù)當前拷貝的數(shù)據(jù)類型,可變類型和不可變類型有不同的處理方式。
(1),、對于不可變對象(數(shù)字,、字符串、元祖),淺拷貝和深拷貝是沒有區(qū)別的,。
(2),、對于可變對象(列表、字典,、集合),淺拷貝第一次層引用,而深拷貝是完全拷貝,。
1、賦值—對象賦值實際上是簡單的對象引用
比較簡單,賦值就是對物體進行貼標簽操作,作用于同一物體,。
- 賦值:值不變,地址不變;
- copy淺拷貝和deepcopy深拷貝:值相等,地址不相等;
2,、淺拷貝—只拷貝父對象
A shallow copy constructs a new compound object and then (to the extent possible) inserts references into it to the objects found in the original.
(1)、淺拷貝是指拷貝的只是原對象元素的引用,換句話說,淺拷貝產(chǎn)生的對象本身是新的,但是它的內(nèi)容不是新的,只是對原對象的一個引用,。
(2),、淺拷貝是指把存放變量的地址值傳給被賦值,最后兩個變量引用了同一份地址。
- 淺拷貝會創(chuàng)建一個新的容器對象(compound object),。
- 對于對象中的元素,淺拷貝就只會使用原始元素的引用(內(nèi)存地址),。
| 常見的淺拷貝操作有:
- 使用切片操作[:]
- 使用工廠函數(shù)(如list/dir/set)
- copy模塊的copy()方法
|
1、淺拷貝的代碼實現(xiàn)
import copy
b=copy.copy(a)
3,、深拷貝—完全拷貝父對象及其子對象
A deep copy constructs a new compound object and then, recursively, inserts copies into it of the objects found in the original.
(1),、深拷貝是指被賦值的變量開辟了另一塊地址用來存放要賦值的變量的值(內(nèi)容)。
1,、深拷貝的應(yīng)用: 主要是希望在改變新的數(shù)組(對象)的時候,不改變原數(shù)組(對象),即原來的東西還要使用,。
- 1)深拷貝和淺拷貝一樣,都會創(chuàng)建一個新的容器對象(compound object)
- 2)和淺拷貝的不同點在于,深拷貝對于對象中的元素,深拷貝都會重新生成一個新的對象
| 常見的深拷貝操作有:
|
2、深拷貝的代碼實現(xiàn)
import copy
b=copy.deepcopy(a)