Differences in python function parameters

大家讲道理
Release: 2017-05-28 09:56:40
Original
1679 people have browsed it

In the process of using python, I found that when the function parameter is list , calling list.append() inside the function will change the formal parameters, which is different from C/C++. Check the relevant information and record it here

##. #In python, id can get the memory address of

object


>>> num1 = 10>>> num2 = num1>>> num3 = 10>>> id(num1)4299190320>>> id(num2)4299190320>>> id(num3)4299190320
Copy after login


You can see num1, num2, and num3 An object points to an address. Python here uses a method called

referencecounting, which is very similar to C++zhong’s smart pointer. The variableis assigned to The variable is equivalent to the reference counter of the same object + 1, instead of reallocating space.

For the list object, you can see the following results:


>>> list1 = [,>>> list2 = [,>>> >>> 4302498128
Copy after login


list1 and list3 point to the same space, and list2 points to another address.

Function parameter passing in python is object passing, and there are also local and global problems. When passing parameters. There are two rules in the process:

  • Copy parameters to objects in local scope by reference, which means that the variables used to access function parameters have nothing to do with the object raised to the function. Because there is a copy problem, this is the same as

    C language. And modifying the local object will not change the original data.

  • You can modify the variable object in the appropriate location. . Variable objects are mainly lists and dictionaries. This position is essentially that the modification of the local sub-object analyzed earlier will not change the ID of the dictionary object or list object

##

def incrInt(num):
    pId(num)
    num += 1;
    pId(num)def incrList(listArg):
    pId(listArg)
    listArg.append(1);
    pId(listArg)def pId(arg):    print id(arg)
num1 = 10pId(num1)
incrInt(num1)print(num1)

list1 = [0,2]
pId(list1)
incrList(list1)print(list1)
Copy after login


The results are as follows:

 python test.py42991819044299181904429918188010433697991243369799124336979912[0, 2, 1]
Copy after login


You can see that inside the function, When the value of int is changed, num points to another memory address, and when the list is modified, it is at the same memory address.

In python, objects can be divided into mutable and immutable. ) two types, tuple, number,

string

(string) are all immutable objects, while dictionary and list ) object is a variable object So please pay attention when passing parameters

.

The above is the detailed content of Differences in python function parameters. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!