資料型別 記憶體與拷貝

2022-02-02 01:58:05 字數 1348 閱讀 7923

靜態儲存

python是用c寫的,python裡的str也是用c寫的,但是c語言裡預設是沒有字串的,它使用的是字元陣列,這種陣列只要存在記憶體就固定占用一定記憶體,它是不可修改的。

而使用replace()更改字串,實際上是又生成了另乙個新字串用作修改,初始的字串是不變的,它依然存放於記憶體裡。

動態儲存

list、dict等是動態的,可以記錄下乙個元素的位置或上乙個元素的位置,下面以list為例:

import copy    #在使用拷貝時需要匯入copy模組

n1 = 123

print(id(n1)) #4297550464

n2 = n1 #賦值

print(id(n2)) #4297550464

n3 = copy.copy(n1) #淺拷貝

print(id(n3)) #4297550464

n4 = copy.deepcopy(n1) #深拷貝

print(id(n4)) #4297550464

list、dict、tuple

對於list、dict、tuple而言,意義就大不一樣了

* 賦值

* 淺拷貝

在記憶體中只額外建立第一層資料

* 深拷貝

在記憶體中將所有的資料建立乙份(最後一層資料除外,這是由python內部對字串和數字型別的優化導致的)

引用資料型別的淺拷貝與深拷貝

基本的資料型別可以分為兩類 基本資料型別 值型別 數字 字串 布林值 undefined null 引用資料型別 引用型別 函式 陣列 物件 只有複雜資料型別 引用資料型別 才有淺拷貝與深拷貝 基本資料型別資料傳遞後,在改變源資料後面不會改變 基本資料型別存的是值 引用資料型別存的是位址 引用資料型...

論基本資料型別與引用資料型別以及深淺拷貝的區別

一 資料型別 js有兩種資料型別 2.棧 stack 與 堆 heap 的概念 3.這兩類資料型別的儲存方式 變a的同時b沒有發生改變,因此接下來分析一下產生這種變化的原因 當 b a 時,棧會新開闢乙個記憶體,如下 所以當你此時修改a 2,對b並不會造成影響,因為此時的b已自食其力,翅膀硬了,不受...

深拷貝 淺拷貝 資料型別

1 不可變型別 包括數值 字串 元組 不可變指的是不能改變引用,只能放置乙個新的引用 2 可變型別 包括列表和字典 可變指的是當向列表或字典裡面增刪改時,引用沒有受到影響 進一步解釋可變與不可變,是指記憶體中的那塊內容 value 是否可以被改變。如果是不可變型別,在對物件本身操作的時候,必須在記憶...