Python程式設計學習5:python id()函式和記憶體分配理解
1. id()函式可返回物件的記憶體地址
python中會為每個物件分配記憶體,哪怕他們的值完全相等。id(object)函式是返回物件object在其生命週期內位於記憶體中的地址,id函式的引數型別是一個物件。如下例子:c, d 和 2.0 地址不同,但值相等。
c = 2.0
d = 2.0
print(id(c),id(d),id(2.0))
print('c == d:',c==d)
print('c is d:',c is d)
c == d 比較的是c和d的值是否相等,c is d 則比較的是c和d記憶體(或id)是否一樣。
2537439396824 2537439396776 2537439396800 c == d: True c is d: False
2. 為了提高記憶體利用效率對於一些簡單的物件,如一些數值較小的int對象,字串物件等,python採取重用物件記憶體的辦法.
(1)如指向a=2,b=2時,由於2作為簡單的int型別且數值小,python不會兩次為其分配記憶體,而是隻分配一次,然後將a與b同時指向已分配的物件。
a = 2
b = 2
print(id(a),id(b),id(2))
print('a == b:',a==b)
print('a is b:',a is b)
1683941872 1683941872 1683941872
a == b: True
a is b: True
e = 'test' f = 'test' print(id(e),id(f),id('test')) print('e == f:',e==f) print('e is f:',e is f) 2537402630528 2537402630528 2537402630528 e == f: True e is f: True
(2)如對於數值較大的int物件,python會為aa和bb分別申請一塊記憶體,來儲存1999839。
aa = 1999839
bb = 1999839
print(id(aa),id(bb),id(1999839))
print('aa == bb:',aa==bb)
print('aa is bb:',aa is bb)
2537439576464 2537439576368 2537438627472
aa == bb: True
aa is bb: False
3. 記憶體分配理解
x=3這句的執行過程並不是先獲取x原來指向的物件的地址,再把記憶體中的值更改為3,而是新申請一段記憶體來儲存物件3,再讓x去指向物件3,
x=2
print(id(2))
print(id(x))
x=3
print(id(3))
print(id(x))
1683941872
1683941872
1683941904
1683941904
L=[1,2,3]
M=L
print(id(L))
print(id(M))
print(id(L[2]))
L[0]=2
print(id(L))
print(M)
2537439413000
2537439413000
1683941904
2537439413000
[2, 2, 3]
L[0] 和 L[1] 同時指向數值2,所以地址相同 (如果是2.0則地址不同)
參考文獻:https://blog.csdn.net/tycoon1988/article/details/38850443
相關推薦
Python程式設計學習5:python id()函式和記憶體分配理解
1. id()函式可返回物件的記憶體地址python中會為每個物件分配記憶體,哪怕他們的值完全相等。id(object)函式是返回物件object在其生命週期內位於記憶體中的地址,id函式的引數型別是一個物件。如下例子:c, d 和 2.0 地址不同,但值相等。c = 2.
Python程式設計學習10:lambda表示式和filter,map函式的使用
1. lambda 表示式 (1) 優點: a. 在寫一些簡單函式時,可以省下定義函式的過程,使得程式碼更加精簡 ,同時也簡化了程式碼的可讀性 b. 對於一些比較抽象並且只需要呼叫一兩次的函式,有時候給函式取名字也比較頭疼,使用lam
「技術乾貨」python程式設計入門須知:python運算子
學習一定是腳踏實地一步一個腳印的,程式設計也是一樣的。想要學好Python,首先來了解一遍Python程式設計入門知識之Python運算子吧。 運算子的知識主要是分為以下幾點: 1、算術運算子 2、比較(即關係)運算子 3、賦值運算子 4、邏輯運算子
python程式設計基礎2:python資料型別
從一個簡單的例子開始:輸入5個數,按從大到小輸出。你怎麼做? 其實可以按照昨天的一個例題那樣子做,但是資料較多,繁瑣且容易出錯。但是使用python的列表(list)資料型別就不會這樣了。 1、列表 先通過如下的例子瞭解list的一些基本的操作: >>>
python程式設計基礎3:python選擇和迴圈結構
這一節的知識點很簡單:選擇:if else 迴圈:while或者for。所以這一節我們直接上例題。 1.輸入三角形的三條邊,判斷是否能組成三角形。若是可以,計算三角形的面積。 程式碼: import math a,b,c=input('please input 3 numb
三維重建學習(5):簡單地從數學原理層面理解雙目立體視覺
前言 這是我前段時間學習雙目視覺時做的筆記,這一篇文章不會進行過於細緻的推導,僅僅會在一些理想情況下做一些簡單的推導,目標是得到一個直觀上的認識:雙目視覺是如何得到三維立體座標的。以後的部落格還會再放上一些詳細的推導,和對雙目視覺提取景深的程式實現。嘛,先一步
Windows核心程式設計學習六:程序優先順序組和執行緒優先順序
注:原始碼為學習《Windows核心程式設計》的一些嘗試,非原創。若能有助於一二訪客,幸甚。 1.基本框架 使用CreateDialog和MAKEINTERESOURCE /* * File: SchedLab.cpp * Time: 2013-04-20 * D
虛擬機器學習之二:垃圾收集器和記憶體分配策略
1.物件是否可回收 1.1引用計數演算法 引用計數演算法:給物件中新增一個引用計數器,每當有一個地方引用它時,計數器值就加1;當引用失效時,計數器值就減1;任何時候計數器值為0的物件就是不可能再被使用的物件。 客觀來說,引用計數演算法的實現簡單,判定效率高,在大部分情況下都是
《零基礎入門學習Python》(20)--函式:內嵌函式和閉包
前言 之前我們講了函式的一些相關知識,瞭解了什麼是全域性變數什麼是區域性變數,接下來我們看看怎麼將區域性變數變為全域性變數。還要將將內嵌函式的相關概念 知識點 global關鍵字 使用global關鍵字,可以修改全域性變數: >>> count
python學習筆記:取整函式
三種取整方式: 一、向下取整:即捨去小數點後所有資料。int (n),例如: int(3.67) #figure out 3 二、四捨五入:round(n),例如: round(4.56) #figure out 5 round(-4.56) #figure o
python學習筆記:python程式設計基礎
1、python的包的種類 自帶的包(built-in)package和外部(external)package 1.1 自帶package,舉例os、os.getwd(). 3、環境變數中配置easy_install,pip 沒有提供引數,需要設定引數 easy
Python基礎學習四:for迴圈,函式,迭代器
12、for迴圈 """ for 變數 in 序列 執行的程式碼塊 """ list01 = ['joe', 'susan', 'jack' ,'Tom'] # 遍歷列表 for i in list01: print(i) pass空操作,無任何意義, pas
第020講:函式:內嵌函式和閉包 | 學習記錄(小甲魚零基礎入門學習Python)
(標答出處: 魚C論壇) 《零基礎入門學習Python》 測試題: 0.如果希望在函式中改變全域性變數的值,應該使用什麼關鍵字? global 1.在巢狀的函式中,如果希望在內部函式修改外部函式的區域性變數,應該使用什麼關鍵字? nonlocal 2.pyth
機器學習篇:Python,NumPy函式庫基礎
NumPy函式庫基礎 (參考自《機器學習實戰》) 先開啟Pyhton >>> from numpy import * 引入NumPy函式庫所有模組 >>> random.rand(4,4) 隨機建立4x4矩陣 >>
Python學習筆記:Python函數語言程式設計
Python學習筆記:Python函數語言程式設計 學自廖雪峰巨佬的Python3教程:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014317848428125ae6a
Python機器學習筆記:深入理解Keras中序貫模型和函式模型
先從sklearn說起吧,如果學習了sklearn的話,那麼學習Keras相對來說比較容易。為什麼這樣說呢? 我們首先比較一下sklearn的機器學習大致使用流程和Keras的大致使用流程: sklearn的機器學習使用流程: 1 2 3 4
python進階5:外層函式、內層函式和閉包
在函式內部定義的函式和外部定義的函式是一樣的,只是他們無法被外部訪問,例如: def f(): print 'f()' def g(): print 'g()' return g #將g定義在函式f內部,防止其他程式碼呼叫g 但
python實現opencv學習十:floodFill填充函式函式
指定顏色填充:程式碼如下:# -*- coding=GBK -*- import cv2 as cv import numpy as np #指定顏色替換 def fill_image(image): copyImage = image.copy()#複製原影象
吳裕雄--天生自然python學習筆記:python通過“任務計劃程式”實現定時自動下載或更新執行 PM2.5 資料抓取程式資料
在 Windows 任務計劃程式中,設定每隔 30 分鐘自動抓取 PM2.5 資料,井儲存 在 SQLite 資料庫中 。 import sqlite3,ast,requests,os from bs4 import BeautifulSoup #cur_path=os
Python機器學習筆記:SVM(2)——SVM核函式
上一節我學習了完整的SVM過程,下面繼續對核函式進行詳細學習,具體的參考連結都在上一篇文章中,SVM四篇筆記連結為: Python機器學習筆記:SVM(1)——SVM概述 Python機器學習筆記:SVM(2)——SVM核函式 Python機器學習筆記:SVM(3)——證明SVM Python機器學習筆記