python中对象和变量是分开的。而类型属于对象和变量无关。变量有局部和全局一说,对象没有。对象由引用计数管理。在函数内部新建一个对象,它的销毁和函数作用域无关,由引用计数决定。
可以认为Python中的变量相当于C语言中的指针变量,指向一个对象。而类型属于对象和变量无关。
a = 1 a是变量,1是一个int类型的对象。
a = 2 a是变量,2是一个int类型的对象,int类型对象是改变不了的,所以又建了一个对象2,a变量引用这个对象。id(a)参看变量引用对象已经改变。变量是没有类型的,只有对象有类型。
b = [1] b是变量,[1]是一个list类型的对象。list类型的对象可以修改值。
b[0] = 2 b变量还是引用的原来的对象 这点可以用id(b)查看。
在函数传参的时候,是变量赋值,如有一个函数如下,在调用时,参数a 引用了 b变量指向的对象,a,b是两个不同变量,但是指向同一对象。当改变a的赋值时,如果a指向的对象的类型是可以改变的,那么b所指向的对象也改变了,因为是同一个。如果不能改变,那么就新建一个对象,再让a 引用这个对象。
def func(a):
....
b = 1
func(b)
下面这个篇文章转自:http://blog.chinaunix.net/uid-20937170-id-3275808.html
点击(此处)折叠或打开
- int swap(int a,int b)
- {
- int temp;
- temp = a;
- a = b;
- b = temp;
-
- return 0;
- }
-
- int a = 10,b = 20;
- printf("Before Swap a = %d, b = %d\n",a,b);
- swap(a,b);
- printf("After Swap a= %d,b = %d\n",a,b);
点击(此处)折叠或打开
- >>> IntNum = 10
- >>> Num1 = IntNum
- >>> id(IntNum),id(Num1)
- (10417212, 10417212)
- >>> Num2 = 10
- >>> id(IntNum),id(Num1),id(Num2)
- (10417212, 10417212, 10417212)
- >>> intNum = 20
- >>> Num1 = 30
- >>> Num2 = 40
- >>> id(IntNum),id(Num1),id(Num2)
- (10417212, 10416972, 10416852)
点击(此处)折叠或打开
- #list
- >>> list1 = [1,2,3,4,5]
- >>> list2 = [1,2,3,4,6]
- >>> id(list1),id(list2)
- (19050128, 19034520)
- >>> list1[4]=6
- >>> list1
- [1, 2, 3, 4, 6]
- >>> id(list1),id(list2)
- (19050128, 19034520)
-
- #dict
- >>> dict1 = {'a':1,'b':2,'c':3,'d':4}
- >>> dict2 = {'a':1,'b':2,'c':3,'d':5}
- >>> id(dict1),id(dict2)
- (19042496, 19021232)
- >>> dict1['d'] = 5
- >>> dict1
- {'a': 1, 'c': 3, 'b': 2, 'd': 5}
- >>> dict2
- {'a': 1, 'c': 3, 'b': 2, 'd': 5}
- >>> id(dict1),id(dict2)
- (19042496, 19021232)
点击(此处)折叠或打开
- def function(args):
- function_block
点击(此处)折叠或打开
- >>> def modifier(number,string,list):
- number = 5
- string = 'GoodBye'
- list = [4,5,6]
- print "Inside:", number,string,list
-
-
- >>> num = 10
- >>> string = 'Hello'
- >>> list = [1,2,3]
- >>> print 'Before:', num, string, list
- Before: 10 Hello [1, 2, 3]
- >>> modifier(num,string,list)
- Inside: 5 GoodBye [4, 5, 6]
- >>> print 'After:', num, string, list
- After: 10 Hello [1, 2, 3]
点击(此处)折叠或打开
- >>> def modifier(list,dict):
- list[0] = 10
- dict['a'] = 10
- print 'Inside list = %s, dict = %s' %(list,dict)
-
- >>> dict = {'a':1,'b':2,'c':3}
- >>> list = [1,2,3,4,5]
- >>> print 'Before list = %s, dict = %s' %(list,dict)
- Before list = [1, 2, 3, 4, 5], dict = {'a': 1, 'c': 3, 'b': 2}
- >>> modifier(list,dict)
- Inside list = [10, 2, 3, 4, 5], dict = {'a': 10, 'c': 3, 'b': 2}
- >>> print 'After list = %s, dict = %s' %(list,dict)
- After list = [10, 2, 3, 4, 5], dict = {'a': 10, 'c': 3, 'b': 2}
点击(此处)折叠或打开
- >>> def swap(list):
- temp = list[0]
- list[0] = list[1]
- list[1] = temp
-
-
- >>> list = [10,20]
- >>> list
- [10, 20]
- >>> swap(list)
- >>> list
- [20, 10]