1. 程式人生 > >Python基礎——變數、物件和引用

Python基礎——變數、物件和引用

首先需要知道的是,python語言是動態型別語言,即變數的型別是可以隨著執行時間變化的,沒有必要事先宣告。一個變數在第一次賦值時建立,比如x = 3,建立了變數x並且指向物件3。型別的概念存在於物件而非變數中。

物件是分配的一塊記憶體,有足夠的空間表示它所代表的的值,並且還有兩個標準的頭部資訊:型別識別符號,表示物件的型別;引用計數器,記錄該物件被多少個變數或者物件引用。Python快取了小整數和短字串並對其進行復用,比如

>>>x = 1
>>>y = 1
>>>x is y  #is檢查的是同一性,即兩個變數是否引用同一物件;==操作符和is
操作符不同,檢查值是否相等 True

而對於其他的值,Python會建立一個新的物件去儲存該值,這樣同一性判斷結果為False。

python中變數的賦值:

x = 4
y = x

第一個賦值語句的結果是,x引用記憶體中的物件4;第二個賦值語句執行後,y和x引用同一個物件,稱作共享引用。如果此時再給x賦值,

>>>x = 6
>>>y
4

重新賦值只是讓x引用新的物件,並不會改變原引用物件。
但是對可以在原處進行修改的物件,重新執行上面的操作,結果會有所不同,比如

>>>x = [1,2,3]#x[0]引用物件1...
>>>y = x >>>y[2] = -1#改變y所引用的元素物件 >>>x [1,2,-1] #x的值被改變了!

對於可以原處修改的物件,如果想進行拷貝,有以下方法:分片(適合序列)、copy模組、物件的copy()方法:

y=x[:]#建立新的物件,y指向新的記憶體空間
or
from copy import deepcopy
y = deepcopy(x)

注意:無條件的分片以及字典copy方法只能進行頂層複製。如果需要對一個深層巢狀的資料結構進行完整拷貝,那麼需要使用copy模組。



sys模組的getrefcount()函式可以返回物件的引用次數

>>>from sys import getrefcount
>>>getrefcount(1)

相關推薦

Python基礎——變數物件引用

首先需要知道的是,python語言是動態型別語言,即變數的型別是可以隨著執行時間變化的,沒有必要事先宣告。一個變數在第一次賦值時建立,比如x = 3,建立了變數x並且指向物件3。型別的概念存在於物件而非變數中。 物件是分配的一塊記憶體,有足夠的空間表示它所代表

Python基礎---變數常量進位制轉義字元識別符號input()函式

# 向控制檯輸出hello world print('hello "world"') #輸出文字框 print(""" --------------- |-------------| |中二勢力哈哈哈| |-------------| ---------------""") # 這是多行註釋''

python基礎之名稱空間作用域函數嵌套

空間 dir pri 引用 value log 關系 fun ret 一、名稱空間 1、定義:存放名字與值的綁定關系 2、名稱空間分為:內置名稱空間、全局名稱空間、局部名稱空間 內置名稱空間:python解釋器自帶的名字,python解釋器啟動就會生成 全局名稱空間:文件級

python下,類物件例項物件區別,類變數例項變數區別

Y14 一、類物件和例項物件 簡短理論: 類物件是將具有相似屬性和方法的物件總結抽象為類物件,可以定義相似的一些屬性和方法,不同的例項物件去引用類物件的屬性和方法,能減少程式碼的重複率。 例項物件又稱例項化物件,不是抽象而是一類物件中具體的一例物件。 比

python基礎二之列表元組(序列相加乘法成員資格)

這篇文章記載序列相加、乘法、成員資格等內容。 1、序列相加 看下面的例子: number1=[1,2,3] number2=[4,5,6] add=number1+number2; print("add:{}".format(add)) str1=["hello"] str2=["w

python基礎----isinstance(obj,cls)issubclass(sub,super)反射__setattr__,__delattr__,__getattr__二次加工標準類

  一、isinstance(obj,cls)和issubclass(sub,super)   isinstance(obj,cls)檢查是否obj是否是類 cls 的物件 class Foo(object): pass obj = Foo() i

Python基礎09 面向物件的self__init__

# 在定義方法時,必須有self這一引數。這個引數表示某個物件。物件擁有類的所有性質,那麼我們可以通過self,呼叫類屬性,相當於java的this class Human(object): laugh = 'hahaha' def perform_laugh(self):

Python之類變數類方法類作為物件傳入類方法中結合講解版本

1、 直接上個原始碼 class Animal(object): animalName = "Animal" #類變數,看來python中沒靜態變數這一說(我之前的說法不嚴謹) @classmethod #類方法 def pr

笨辦法學python習題18 命名變數程式碼函式

又快到一週末的結尾了,得更新部落格了,下面直接開始吧。 首先閱讀一下文字內容,然後開始愉快的敲擊程式碼:   在執行程式碼的時候我遇到了這樣的問題:  對於像我這樣有些中文句子 都理解不了的,默默地打開了百度,百度上說錯誤的原因是該行行首沒有

Python學習第四天(變數集合字串)

上一篇沒有儲存傷心 變數在賦值時即被建立===賦值會讓變數自動生成 變數在表示式中使用以前 必須被賦值 ———————————————————————————————————————————————— 集合 集合中的一個項無論新增多少次,只能出現一次 集合是無序的、唯一的、不

python:廖雪峰教程——python基礎:資料型別變數 轉義符練習

1、通過s1 ,s2 可以知道  r'      '或者r"       "表示的是內部' '或者" "的字串預設不轉義2、最後一個s4我們也可以用''' '''來進行換行的操作規範:'''line1             line2     

python基礎2-靜態方法類方法

變量 img 靜態 訪問 func title 改變 參數 code 1. 類方法 是類對象所擁有的方法,需要用修飾器@classmethod來標識其為類方法,對於類方法,第一個參數必須是類對象,一般以cls作為第一個參數(當然可以用其他名稱的變量作為其第一個參數,但是大部

Python基礎-時間模塊radom模塊

day pri cal bsp name pytho style pro dst 時間模塊 import time # 引入時間模塊 print(time.time()) # 1508146954.9455004: 時間戳 print(time.clock()) # 計算

[1][python基礎]字符串編碼[2]

數據 例如 bom 輸出 通用 源碼 量變 二進制 tab [1][python基礎]字符串和編碼[2] 字符編碼 我們已經講過了,字符串也是一種數據類型,但是,字符串比較特殊的是還有一個編碼問題。 因為計算機只能處理數字,如果要處理文本,就必須先把文本轉換為數字才能處理

python基礎學習時間timedatetime模塊

使用 負數 orm 本地 amp 元組 format 夏令時 字符轉換 時間模塊time和datetime()時間表現為三種格式 1.時間戳 2.時間元組 3.格式化字符串(2017-11-1)時間戳:通常來說時間戳表示的是從格林威治1970年1月1日00:00:00

Python基礎-ossys模塊

os模塊 令行 搜索路徑 onf 初始 解釋 stdout 文件 版本 一,os模塊import os ,sysos.system(‘ipconfig‘)#執行操作系統命令,獲取不到返回結果 os.popen()#也可以執行操作系統命令,可以返回命令執行結果,但需要rea

python基礎之條件判斷循環

... 1-1 跳過 else if 生成 pre name code 條件判斷 1.條件判斷 age = 3 if age >= 18: print(‘adult‘) elif age >= 6: print(‘teenager‘) else:

python基礎--列表元祖字典集合

count ear 輸出 定位 python基礎 xtend -c col spa 列表(List) 1、列表特點   列表是可變的!!   list 是一種有序的序列,可以添加、刪除其中的元素,並且可以通過下標(索引)訪問 數據 2、簡單的常用操作   A、通過下表訪問元

Python基礎-列表元祖字典字符串

找到 討論 fin 重復 連接 反向 實現 一起 訪問 列表和分組 序列概覽: 數據結構是通過某種方式組織在一起的數據元素的集合。這些元素可以是數字、字符,甚至可以是其他數據結構。 在python中,最基本的數據結構是序列(sequence)。 序列中的每一個元素被分配

python數據表的合並(python pandas join() merge()concat()的用法)

div 等價 nta cti nio eve 數據合並 inner lai merage# pandas提供了一個類似於關系數據庫的連接(join)操作的方法<Strong>merage</Strong>,可以根據一個或多個鍵將不同DataFr