1. 程式人生 > >Python的函式引數傳遞後 引數可變與不可變問題

Python的函式引數傳遞後 引數可變與不可變問題

首先看下面的例子:

a = 1
def func(a):
  a=2
func(a)
print(a)
##1
a = []
def func(a):
  a.append(1)
func(a)
print(a)
##[1]

解釋如下:

型別是屬於物件的,而不是變數。而物件有兩種,“可更改”(mutable)與“不可更改”(immutable)物件。在python中,strings, tuples, numbers是不可更改的物件,而list,dict等則是可以修改的物件。(這就是這個問題的重點)

        當一個引用傳遞給函式的時候,函式自動複製一份引用,這個函式裡的引用和外邊的引用沒有任何關係了.所以第一個例子裡函式把引用指向了一個不可變物件,當函式返回的時候,外面的引用沒半毛關係.而第二個例子就不一樣了,函式內的引用指向的是可變物件

,對它的操作就和定位了指標地址一樣,在記憶體裡進行修改.

相關推薦

Python函式引數傳遞 引數可變可變問題

首先看下面的例子: a = 1 def func(a): a=2 func(a) print(a) ##1 a = [] def func(a): a.append(1) func(a) print(a) ##[1] 解釋如下: 型別是屬於物件的,而不是變

python中的可變可變對象

不想 不可變 ron 中一 再看 += function itl 們的 Python中的可變對象和不可變對象 什麽是可變/不可變對象 不可變對象,該對象所指向的內存中的值不能被改變。當改變某個變量時候,由於其所指的值不能被改變,相當於把原來的值復制一份後再改變,這會

python —— 可變可變類型

自己 style 一次 發生 eight 類型 2.0 borde true 可變與不可變類型對象 可變和不可變,本質上就是改變了裏面的數據後,內存地址是否有改變 可變類型、不可hash 不可變類型,可hash 列表 字符串 字典 數字 集合 元組

python 可變可變資料型別

1、什麼是不可變型別: 變數對應的值不能被修改,如果修改就會生成一個新的值,從而分配新的記憶體空間。變,id會變,會生成一個新的值。 不可變型別: 數字(int、long、float),布林(bool),字串(str),元組(tuple)   2、什麼是可變型別: 變數對應的值中資料可以

Python可變可變資料型別

Python3 的六個標準資料型別中: 不可變資料型別(3 個):Number(數字)、String(字串)、Tuple(元組) 可變資料型別(3 個):List(列表)、Dictionary(字典)、Set(集合)   不可變資料型別:(id(物件) 檢視該物件的記憶體地

Python中的可變可變型別

首先,我們需要知道在python中哪些是可變資料型別,哪些是不可變資料型別。可變資料型別:列表list和字典dict;不可變資料型別:整型int、浮點型float、字串型string和元組tuple。用一句話來概括上述過程就是:“python中的不可變資料型別,不允許變數的值

python變數賦值(可變可變

內容來自:部落格地址:http://www.cnblogs.com/evening/archive/2012/04/11/2442788.html二、函式引數:Python函式引數對於可變物件,函式內對引數的改變會影響到原始物件;對於不可變物件,函式內對引數的改變不會影響到原

Python可變可變資料型別

python的可變與不可變資料型別     初學python的時候,可能會有很多疑惑,尤其是最先接觸的所謂的“可變資料型別”和“不可變資料型別”。python與C/C++不一樣,它的變數使用有自己的特點,當初學python的時候,一定要記住“一切皆為物件,一切皆為物件的

(一)python可變可變資料型別

>>> x = 1 >>> id(x)   31106520 >>> y = 1 >>> id(y)   31106520 >>> x = 2 >>> id(x)   31106508 >

001_python可變可變類型

創建 引用 -s 浮點型 1.0 value 元組 內存管理機制 ron python的每個對象都分為可變和不可變類型。 主要的核心類型,不可變類型有數字、字符串、元組,可變類型有列表、字典。 不可變類型以int類型為例:實際上 i += 1 並不是真的在原有的int對

【scala】可變可變的理解

我們定義變數的時候分為var可變變數和val不可變變數。 我們使用容器的時候也分為可變容器和不可變容器。 List和Tuple本身就是不可變的,set和map分為可變和不可變的,預設為不可變。 我們看這樣一個例子 1 2 va

可變可變類型

查看 mil 字符串 .net 我的博客 垃圾 logs 對象的引用 缺點 1、可變與不可變類型 1)學python,一定要記住“一切皆為對象,一切皆為對象的引用”; 2)所謂可變對象是指,對象的內容可變,而不可變對象是指對象內容不可變; 3

python函式的四種引數傳遞方式

fun1(a,b,c) fun2(a=1,b=2,c=3) fun3(*args) fun4(**kargs) 直接將實參賦予行參,根據位置做匹配。 根據鍵值對的形式做實參與行

python--函式(必選引數、預設引數可變引數、關鍵字引數

# -*-encoding:utf-8 -*- #name = raw_input("please input your name:") #print "Hello", name """ 小結: Python的函式具有非常靈活的引數形態,即可以實現簡單的呼叫,又可以傳入非常

Python函式中的預設引數

# -*- coding: utf-8 -*- def hello(greeting='hello', name='world!'): print '%s,%s' % (greeting, name) hello() hello('I like you') def h

python:函式中五花八門的引數形式(茴香豆的『回』字有四種寫法)

毫不誇張的說,python語言中關於函式引數的使用,是我見過最為靈活的,隨便怎麼玩都可以,本文以數學乘法為例,演示幾種不同的傳參形式: 一、預設引數 def multiply1(x, y): return x * y print("multiply1:", multiply1(2,

函式引數傳遞引數傳遞從右往左

記憶體分為4個區域,如下: 而函式的引數就存放在棧中。棧,先進後出。 引數傳遞方式:a.通過棧 b.從右往左。 什麼是從右往左呢?來舉個例子。 int Max(int a,int b); Max函式有兩個引數a和b。 這兩個引數怎麼存放在棧中呢?從右往左,即先從b,然後

ajax提交-----URL中文引數傳遞的亂碼問題

jsp頁面: $.ajax({ type:'POST', url:"../user/userInfoExportExcel?org.orgId="+org_id+"&user.uesrName="+encodeURI(encodeURI(user_name)),

像js函式傳遞物件引數

                知乎上的一個問題:http://www.zhihu.com/question/27114726

初學python--函式中的預設引數

預設引數 必選引數在前,預設引數在後 當好多資料的變化不大時候適合將該引數設為預設引數,比如預設性別是男,只需遇到女性時候指定性別,男性便可以不指定 坑 跳出坑的方法就是預設引數必須指向