欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

向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