标签:种类 copy set 种类型 python函数 操作 python ges epc
前几天在做项目的过程中发现了一个问题,向函数中传入一个list,在函数体内将其赋值给list,对list1操作后发现list也发生了变化,啊 ! 出乎意料。查了一下原因,原来python里有可变对象和不可变对象之分。只有传入的是不可变对象时,值才不发生改变,若是可变对象,充当函数参数时要注意了。
不可变对象:Number ,String , Tuple,bool
可变对象: List , Set , Dictionary是可以改变内部的元素
下面总结一下:
先看例子:
def changestr (str):
str = "inside"
print "这是function中 , 值为:",str
mystr = "outside"
changestr(mystr)
print "这是函数外边 , 值为:",mystr
输出结果:
这是function中 , 值为: inside
这是函数外边 , 值为: outside
即 传入不可变对象字符串,在函数内对其操作不影响调用结束后字符串的值,即不发生改变。
ps: Number和Tuple结果是一样的,这三种类型只能通过重新赋值来改变对象的值 .
def changestr (str):
str.append(3)
print "这是function中 , 值为:",str
mystr = [1,2]
changestr(mystr)
print "这是函数外边 , 值为:",mystr
结果:
这是function中 , 值为: [1, 2, 3]
这是函数外边 , 值为: [1, 2, 3]
3
def change2(list):
list = [1,2,3,4]
mylist = ["aa",21]
print(mylist)
change2(mylist)
print(mylist)
输出结果:
[‘aa‘, 21]
[‘aa‘, 21]
可变对象在函数体中的重新赋值 , 没有对外部变量的值产生影响 , 不过仔细一想 , 却又在情理之中 .
3
def change2(list):
list1 =list
list1.append(34)
mylist = ["aa",21]
print mylist
change2(mylist)
print mylist
输出结果:
[‘aa‘, 21]
[‘aa‘, 21, 34]
要想不改变yuanlist,用copy.deepcopy()
import copy
def change2(list):
list1=copy.deepcopy(list)
list1.append(34)
mylist = ["aa",21]
print mylist
change2(mylist)
print mylist
结果:
[‘aa‘, 21]
[‘aa‘, 21]
标签:种类 copy set 种类型 python函数 操作 python ges epc
原文地址:https://www.cnblogs.com/monkey-moon/p/9347505.html