1. 程式人生 > >python記憶體分配機制

python記憶體分配機制

python中數值型別是不可變物件,當程式試圖改變資料的值時,程式會重新生成新的資料,而不是改變原來的資料。
python函式的引數都是物件的引用,如果在引用不可變物件時嘗試修改物件,程式會在函式中生成新的物件(開闢新的地址空間),函式外被引用的物件則不會被改變。

num=1
def add(num):
    num+=1
print(num)
//1

如果想改變num的值,可以通過函式返回值來實現

L = [1, 2]
def add(list):
    list.append(3)
add(L)
print(L)
//[1, 2, 3]

這裡因為函式的引數是引用

深複製和淺複製
1.copy.copy,僅僅複製父物件
2.copy.deepcopy,複製父物件和子物件

import copy
list1=[1,2,['a','b']]
list2=list1
list3=copy.copy(list1)
list4=copy.deepcopy(list1)
list1.append(3)
list1[2].append('c')
print(list1,'\n',list2,'\n',list3,'\n',list4)
# [1, 2, ['a', 'b', 'c'], 3] 
# [1, 2, ['a', 'b', 'c'], 3]
# [1, 2, ['a', 'b', 'c']] 
# [1, 2, ['a', 'b']]

相關推薦

python記憶體分配機制

python中數值型別是不可變物件,當程式試圖改變資料的值時,程式會重新生成新的資料,而不是改變原來的資料。 python函式的引數都是物件的引用,如果在引用不可變物件時嘗試修改物件,程式會在函式中生

記憶體探尋1之——值型別和引用型別的記憶體分配機制

String物件和值型別的記憶體分配機制:           同樣由前延伸,上上篇《由String型別分析,所產生的對引數傳遞之惑的解答》中,最後提及,如果將引用型別的按值傳遞和按引用傳遞,用託管堆表

python記憶體管理機制

python的記憶體管理機制:引用計數、垃圾回收、記憶體池機制 一 變數和物件 1、Python快取了整數和短字串,因此每個物件在記憶體中只存有一份,引用所指物件就是相同的,即使使用賦值語句,也只是

malloc動態記憶體分配機制原理_及_linux/proc/介紹

程序系統資源的使用原理          大部分程序通過glibc申請使用記憶體,但是glibc也是一個應用程式庫,它最終也是要呼叫作業系統的記憶體管理介面來使用記憶體。大部分情況下,glibc對使用者和作業系統是透

python深入之python記憶體管理機制(重點)

關於python的儲存問題 (1)由於python中萬物皆物件,所以python的儲存問題是物件的儲存問題,並且對於每個物件,python會分配一塊記憶體空間去儲存它 (2)對於整數和短小的字元等,python會執行快取機制,即將這些物件進行快取,不會為相同的物件分配多個

Java記憶體分配機制

Java存放物件、變數等資訊需要分配記憶體進行儲存,分配及儲存區原理如下: ​ 1.暫存器 它是唯一位域處理器內部的儲存區。所以它是最快的,數量也是極其有限的,並且和 C,C++不一樣的是,Java暫存器是根據程式需求進行分配的,你不能控制、也不能向它“建議“分配方式。在 java 中暫存器對於程式設計

Java虛擬機器記憶體分配機制與啟動引數說明

-Xms :表示java虛擬機器堆區記憶體初始記憶體分配的大小,通常為作業系統可用記憶體的1/64大小即可,但仍需按照實際情況進行分配。-Xmx: 表示java虛擬機器堆區記憶體可被分配的最大上限,通常為作業系統可用記憶體的1/4大小。但是開發過程中,通常會將 -Xms 與 -Xmx兩個引數的配置相同的值,其

python進階用法2 【從幫助函式看python記憶體申請機制

前言 介紹了四個幫助函式,dir(),help(),type(),id(),通過id()函式進一步分析了python在申請記憶體方面的效率問題,提到的基本型別有string,list,queue和deque 四個幫助函式 dir()函式 dir(

[譯]Python 記憶體分配 垃圾回收

原文 譯文 Python主要使用兩個策略實現記憶體分配。 引用計數 垃圾回收 引用計數 統計在系統中,其他物件引用某個物件的次數。當一個引用移除了,這個物件的引用計數減1。引用計數變為0時物件就被回收。 但是引用計數無法解決引用環的問

STL中vector的記憶體分配機制

一些好的公司校園招聘過程中(包括筆試、面試環節),經常會涉及到STL中vector的使用(主要是筆試)及其效能(面試)的分析。今天看了下相關文章,也寫了幾個小的測試程式跑了跑。算是總結下,希望對需要的人有幫助。 關於vector,簡單地講就是一個動態陣列,裡面有一個指標

Java的記憶體分配機制(初步整理)

    Java程式是執行在Java虛擬機器(Java Virtual Machine,JVM)上的,可以把JVM理解為Java程式和作業系統之間的橋樑,JVM實現了Java的跨平臺,Java記憶體分配原理一切都是在JVM中進行的,JVM是記憶體分配原理的基礎與前提。

memcached的一些研究(關於memcached的記憶體分配機制

memcached作為快取已被應用的非常多,memcached的資料結構非常簡單,就是key-value的儲存,瞭解下memcached的記憶體分配機制有助於更好的使用memcache memcached相關的記憶體術語 chunk:資料是儲存

.NET下的記憶體分配機制

    對於任何物件的產生,都伴隨著記憶體空間的分配,那麼本文將初步介紹一下.NET下,是如何進行記憶體分配的。 1.概述 CLR支援兩種基本型別:值型別和引用型別。因此,還是把MSDN這張經典檢視拿出來做個鋪墊。 關於具體每種分類都有哪些型別,

python 記憶體管理機制和調優手段詳解

今天和大家探討一下Python記憶體管理機制和調優手段.話不多說,直接上乾貨: 那麼Python的記憶體管理機制都有什麼呢?                1 . 引用計數                 2 . 垃圾回收                 3 . 記憶

Java記憶體分配機制詳解

文章轉載自:http://www.cnblogs.com/zhguang/p/3257367.html 本文僅載抄了部分內容,若想知道JVM記憶體全量資訊,請檢視原文 Java記憶體分配機制 這裡所說的記憶體分配,主要指的是在堆上的分配,一般的,物件的記憶體分配都是在堆

Python 記憶體分配時的小祕密

Python 中的sys 模組極為基礎而重要,它主要提供了一些給直譯器使用(或由它維護)的變數,以及一些與直譯器強互動的函式。 本文將會頻繁地使用該模組的getsizeof() 方法,因此,我先簡要介紹一下: 該方法用於獲取一個物件的位元組大小(bytes) 它只計算直接佔用的記憶體,而不計算物件內所引

python測試開發棧】python記憶體管理機制(一)—引用計數

什麼是記憶體 在開始進入正題之前,我們先來回憶下,計算機基礎原理的知識,為什麼需要記憶體。我們都知道計算機的CPU相當於人類的大腦,其運算速度非常的快,而我們平時寫的資料,比如:文件、程式碼等都是儲存在磁碟上的。磁碟的存取速度完全不能匹配cpu的運算速度,因此就需要一箇中間層來適配兩者的不對等,記憶體由此而來

python測試開發棧】—python記憶體管理機制(二)—垃圾回收

在上一篇文章中(python 記憶體管理機制—引用計數)中,我們介紹了python記憶體管理機制中的引用計數,python正是通過它來有效的管理記憶體。今天來介紹python的垃圾回收,其主要策略是引用計數為主,標記-清除和分代回收為輔助的策略(熟悉java的同學回回憶下,其實這和JVM的策略是有類似之處的)

Python記憶體管理機制-《原始碼解析》

### Python 記憶體管理分層架構 ```c++ /* An object allocator for Python. Here is an introduction to the layers of the Python memory architecture, showing whe

JVM的藝術-物件建立與記憶體分配機制深度剖析

# JVM的藝術-物件建立與記憶體分配機制深度剖析 > ##### 引言 本章將介紹jvm的物件建立與記憶體分配。徹底帶你瞭解jvm的建立過程以及記憶體分配的原理和區域,以及包含的內容。 > ### 物件的建立 ![](https://img2020.cnblogs.com/ot