向Python类和函数传递不同的参数的区别
程序员文章站
2022-12-21 08:50:47
实验目的Python中没有指针,但是我们可以探究:1、分别向Python的类传递list,数值,类对象三种参数,然后改变原始参数,观察类参数的值是否会一起发生变化;2、分别向Python的函数传递list,数值,类对象三种参数,然后在函数内部改变参数,观察函数外部原始参数的值是否会一起发生变化;实验代码:class A(object): def __init__(self, parameter): self.test = parameterdef set_to_No...
实验目的
Python中没有指针,但是我们可以探究:
1、分别向Python的类传递list,数值,类对象三种参数,然后改变原始参数,观察类参数的值是否会一起发生变化;
2、分别向Python的函数传递list,数值,类对象三种参数,然后在函数内部改变参数,观察函数外部原始参数的值是否会一起发生变化。
实验代码:
class A(object):
def __init__(self, parameter):
self.test = parameter
def set_to_None(parameter):
print(parameter)
parameter = None
print(parameter)
print('----传递list---------')
l = [1, 2, 3]
a = A(l)
print(a.test)
l.append(4)
print(a.test)
print('----------------')
set_to_None(l)
print(l)
print('----传递int---------')
k = 5
b = A(k)
print(b.test)
k = k + 1
print(b.test)
print('----------------')
set_to_None(k)
print(k)
class X(object):
def __init__(self):
self.a = 1
self.b = 2
self.c = 3
print('----传递class---------')
x = X()
c = A(x)
print(c.test.a)
x.a = 4
print(c.test.a)
print('----------------')
set_to_None(x)
print(x)
"""
----传递list---------
[1, 2, 3]
[1, 2, 3, 4]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
----------------
[1, 2, 3, 4, 5]
None
[1, 2, 3, 4, 5]
----传递int---------
5
5
6
7
----------------
7
None
7
----传递class---------
1
4
5
5
----------------
<__main__.X object at 0x00000215F042C708>
None
<__main__.X object at 0x00000215F042C708>
"""
实验结论:
- 对于给函数传递参数:
不管给函数传递何种参数,在函数内部改变参数的值,都不会影响原始参数,可以理解为Python在函数内部重新申请了一块内存来保存传递进来的数据,在函数内部对该参数的操作,都是在这块新的内存上进行的,等函数执行完毕之后,Python又释放了这块内存;若想在函数内部改变函数外面的变量,可以考虑使用全局变量。
- 对于给类传递参数:
与函数不同的是,list和类对象类型的原始参数的改变会令类参数一起改变,对于而int数值类型不会。由此可知,ist和类对象类型的类参数传递的是原始参数的地址; Python中没有指针,所以向类传递参数到底传的是地址还是值应该和传递的类型有关。
- 同理,对list和类对象进行复制时,复制的是其地址,而其他类型复制的是数值,
这在Python编程时需要特别注意
,示例如下:
# -*- coding: utf-8 -*-
class A(object):
def __init__(self, value):
self.value = value
if __name__ == '__main__':
print('----类对象之间赋值------')
a = A(100)
b = a
print(a.value)
print(b.value)
a.value = 200
print(a.value)
print(b.value)
b.value = 300
print(a.value)
print(b.value)
print('----list之间赋值------')
list1 = [1]
list2 = list1
print(list1)
print(list2)
list1.append(2)
print(list1)
print(list2)
list2.append(3)
print(list1)
print(list2)
print('----数值之间赋值------')
a = 1
b = a
print(a)
print(b)
a = 2
print(a)
print(b)
b = 3
print(a)
print(b)
"""
----类对象之间赋值------
100
100
200
200
300
300
----list之间赋值------
[1]
[1]
[1, 2]
[1, 2]
[1, 2, 3]
[1, 2, 3]
----数值之间赋值------
1
1
2
1
2
3
"""
本文地址:https://blog.csdn.net/guanmaoning/article/details/107370734