1. 程式人生 > 其它 >[課堂筆記][pytorch學習][2]詞向量模型

[課堂筆記][pytorch學習][2]詞向量模型

深拷貝不會修改陣列 淺拷貝會修改陣列 首先要知道資料的型別 Number,String,null,Undefined,Object,Boolean 分成兩大類 : 基本資料型別,引用資料型別 基本資料型別: Number,String,null,Undefined,Boolean 複雜資料型別: Object(引用資料型別) 基本資料型別儲存在棧記憶體裡邊,引用資料儲存在堆記憶體裡邊,根本原因是在於儲存在棧記憶體的必須是大小固定的資料,引用型別的大小不固定,只能儲存在堆記憶體中,但是可以把他的地址寫在棧記憶體裡邊供我們訪問。 如果是基本資料型別,就按值訪問。操作的就是變數儲存的值,如果是引用型別的值,就通過儲存在變數中的引用地址來操作實際物件 一、複製: 1.基本資料型別的複製: 賦值的時候,在棧記憶體裡邊重新開闢記憶體,存放變數b,所以在棧記憶體裡邊分別存放著變數a,b的值,修改時候互補影響 2.引用型別的複製: color1和color2指向的是堆記憶體中的同一個物件,複製的只是引用地址 二、深淺拷貝: 淺拷貝值複製物件的引用地址,而不是複製物件本身,新舊物件還是共享一個引用地址,但是深拷貝會創造一個一模一樣的物件,新物件不會和就物件共享記憶體,修改新物件不會影響舊物件。 1.淺拷貝: 定義:建立一個新物件,這個物件有原始物件的屬性值的一份精確拷貝,如果是基本資料的話拷貝的就是它的值,如果數引用資料型別,拷貝的就是它的堆記憶體的地址,修改一個物件 會影響另一個物件。值是相同的,但是地址也是新開闢的。 淺拷貝的幾種方法: (1)、Object.assign() 對Object。assign而言如果物件的屬性值為簡單的型別(number,stringify)通過Object.assign()得到的新物件為深拷貝,如果屬性值為物件或者其他的引用型別,對這個物件來說就是淺拷貝 Object.assign({},src,src1)對於src src1之間相同的屬性是直接覆蓋的,如果屬性值為物件的話,是不會對 物件之間的屬性進行合併的 (2)slice和concat 只有一層的時候是深拷貝 多層的時候: 缺點:陣列的slice和concat只是會複製第一層,對於第一層的值都是深拷貝,而到了第二層的時候slice和concat就是複製引用 (3))lodash的clone函式 -.clone(value) 引數: value(*)要深拷貝的值 返回 (*)返回拷貝後的值 例子: 深拷貝的方法: (1)遞迴: 對屬性中所有的引用型別的值,遍歷到是基本資料為止 (2)JSON物件的parse和stringify JSON物件中的stringify可以把js物件序列化成一個JSON字串,parse可以把JSON字串反序列化成為一個js物件,實現的是深拷貝 缺點:1.使用條件有限制JSON。stringify無法正確轉換正則表示式都會轉化成{} 2.如果obj裡面有時間物件,則JSON.stringify後再JSON.parse的結果,時間將只是字串的形式,而不是物件的形式 3.如果obj裡有函式,undefined,則序列化的結果會把函式或 undefined丟失 4.如果obj裡有NaN、Infinity和-Infinity,則序列化的結果會變成null 5.JSON.stringify()只能序列化物件的可列舉的自有屬性,例如 如果obj中的物件是有建構函式生成的, 則使用JSON.parse(JSON.stringify(obj))深拷貝後,會丟棄物件的constructor; (3)lodash的cloneDeep函式 -.cloneDeep(value) 引數: value(*)要深拷貝的值 返回 (*)返回拷貝後的值 例子: (4)用的jqery裡面的extend方法; var a = { name: "zjam", obj: { am: "zaofnd", dvd: "ddddd", }, }; var b = $.extend(true, {}, a); // 第一個引數true為深拷貝,第二個引數為目標物件,第三個引數為源物件即你用拷貝那個資料 a.obj.am = "早上"; console.log(a); console.log(b); 缺點:拷貝複雜物件的時候會報錯耗效能,內建的拷貝方法會比cloneDeep安全 三、深淺拷貝的主要區別就是:複製的是引用地址還是複製的值 什麼時候用深拷貝 /淺拷貝 無論深淺,都是需要的,當深拷貝發生時通常表明存在著一個聚合關係, 當淺拷貝發生時,通常表明存在著相識關係 舉個簡單例子:當實現一個組合模式 Composite Pattern 時通常都會實 現深拷貝 當實現一個觀察者模式 Observer Pattern,時,就需要實現淺拷貝