python参数内存地址

1.参数内存地址

查看某个值在内存中的地址

v1=123
id(v1)

函数值执行参数时,传递的是内存地址

#函数执行传参,传递的是内存地址
def func(data):print(data,id(data))  #wxy 2631904099312
v1='wxy'
print(v1,id(v1))  # wxy 2631904099312
func(v1)

python参数(传递内存地址)这个好处:

  • 节省内存

  • 对于可变类型在函数中修改元素内容,所有的地方都会修改【可变类型:list,dict,set】

    #传入的参数是可变类型时;list/dict/set,在函数内部只能对内部元素进行修改
    def func(data):data.append(11)
    data_list=[1,2]
    func(data_list)
    print(data_list)  #[1, 2, 11]#可变类型 & 重新赋值
    def func(data):data=[3,4]#重新开辟一个内存空间,将data指向这个空间,data_list没有变化
    data_list=[1,2]
    func(data_list)
    print(data_list)   #[1,2]#不可变类型,无法修改内容,只能重新赋值
    def func(data):data=2
    v1=1
    func(v1)
    print(v1) 1
    

在其他编程语言执行函数时,默认传参时会将数据重新拷贝一份【会浪费内存】

注意:其他语言也可以通过ref等关键字来实现传递内存地址

如果不想将外部的变量和函数内部参数变量内存地址一致,可以选择将外部变值拷贝一份,再传递给函数

import copy
#不想修改传递的参数的值,可以进行拷贝赋值给另一个变量,传递给函数
def func(data):data.append(11)
data_list=[1,2]
new_list=copy.deepcopy(data_list)
func(new_list)
print(data_list)  #[1, 2]
print(new_list)   #[1, 2, 11]

2.函数返回值是内存地址

def func():data=[11,22,33]return data
v1=func()
print(v1) #[11,22,33]
  • 执行func函数
  • data=[11,22,33]函数内创建一块内存区域,内部存储[11,22,33],data变量指向这块内存地址
  • return data,返回data指向的内存地址
  • v1接收返回值,即v1和data都指向[11,22,33]的内存地址(两个变量指向此内存,引用计数器为2)
  • 函数执行完毕,函数内部变量全部释放(即:删除data变量,内存地址引用计数器-1)

最终,v1指向的函数内部创建的那块内存地址

def func():data=[11,22,33]return data
v1=func()
print(v1,id(v1)) #[11,22,33],1111000000
v2=func()
print(v2,id(v2))  #[11,22,33],1111001111
#v1,v2内存地址不同,因为函数执行完毕内部变量全部释放,所以下一次调用会重新创建内存地址

python参数内存地址相关推荐

  1. python查看内存地址的内容_python中如何查看指定内存地址的内容

    python中一般并不需要查看内存内容,但作为从C/C++过来的人,有的时候还是想看看内存,有时是为了验证内容是否与预期一致,有时是为了探究下内存布局. from sys import getsize ...

  2. python获取内存地址上存储的值

    在python中,可以通过id()这个方法来获取对象的内存地址. 但是反过来,怎么获取内存地址上存储的值? 先看一段代码: from ctypes import string_at from sys ...

  3. python查看内存地址

    1.查看python内存地址 python 通过id查看内存地址 eg: a=1 print(id(a))#输出94486697843200 2.不可变量 不可变对象是指对象的内存值不能被改变.Pyt ...

  4. Python 如何查看内存地址

    python 查看内存地址很简单,使用内置函数id 下面看下使用 a = 1024 print("a的内存地址为:%s" % id(a)) b = 1024 print(" ...

  5. [转]关于内存地址的个人理解和操作原理

    [转]关于内存地址的个人理解和操作原理 发表于:2007年3月22日 15时55分13秒阅读(0)评论(0) 本文链接:http://user.qzone.qq.com/185591848/blog/ ...

  6. python内存地址不变,关于python内存地址问题

    遇到一个朋友,给我提了一个问题:python中的两个相同的值,内存地址是否一样? 当时印象里有这样一句话:Python采用基于值的内存管理模式,相同的值在内存中只有一份 于是张嘴就说是一样的 朋友说不 ...

  7. php 打印变量内存地址_Python合集之Python变量

    在上一节的合集中,我们了解了Python的保留字与标识符,本节我们将进一步了解一下Python中关于变量的问题. 变量严格意义上来讲应该称之为"名称",也可以理解为标签. 在Pyt ...

  8. python查看变量内存地址的内置函数是_查看变量内存地址的Python内置函数是____...

    查看变量内存地址的Python内置函数是____ 答:id() 产妇乳汁分泌主要依赖于 答:哺乳时吸吮刺激 下列选项中,属于"路径面板"中的工具按钮的是 答:用前景色填充路径 用画 ...

  9. python 查看变量内存地址

    1.代码: Python id() 函数 | 菜鸟教程 id()函数返回10进制地址 Python hex() 函数 | 菜鸟教程 hex()函数将10进制地址转为16进制 #!/usr/bin/py ...

最新文章

  1. 《预训练周刊》第8期:首个千亿中文大模型「盘古」问世、谷歌等提出视频音频文本转换器VATT...
  2. 试题集 - 算法与编程
  3. SAP Cloud for Customer(C4C)前台显示的数据是如何从后台读取的
  4. hihocoder-Week243-hiho字符串
  5. 打开方式中选择默认方式无反映_「Windows」得看,更改文件的默认应用,告别“打开方式”...
  6. ejb 2.0 3.0_定义EJB 3.1视图(本地,远程,无接口)
  7. python视频人脸检测_Python基于OpenCV实现视频的人脸检测
  8. 【官方方法】MacBook2017 双系统恢复macOS High Sierra
  9. 一个三年Java程序员的面试总结!
  10. 解决办法:configure: error: C compiler cannot create executables错误
  11. DELPHI2007 安装ACTIVEX插件的方法
  12. NX/UG二次开发—装配—抑制的组件怎么获取原型
  13. springboot获取到的MySQL数据少了8小时
  14. MATLAB连接comsol后MATLAB语言方法
  15. Mac CAD 安装完成后,打开注册机时出现 应用程序“02_注册机”不能打开。
  16. gitbook:gitbook-cli\node_modules\npm\node_modules\graceful-fs\polyfills.js
  17. Linux系统文件加密与解密应用
  18. matlab绘制垂线(x轴或y轴)
  19. 汇承4.0蓝牙BLE串口助手HC-COM的使用方法及出错的原因和改正方法
  20. 在百度Create 2021大会聆听李彦宏,王海峰“论道”AI

热门文章

  1. 信息系统面临的安全风险
  2. 华为鸿蒙小插件,mate30pro鸿蒙系统无法加载时钟小部件
  3. python 通过图片(原图)精确获取图片拍摄的位置,时间,设备等信息
  4. android 系统
  5. NLP之NLG入门理解
  6. Git中的vim命令
  7. WAF学习之一——Nginx与反向代理
  8. BP神经网络原理及在Matlab中的应用
  9. 逻辑回归中的梯度下降法
  10. oracle 12.2R2 安装GI执行root.sh遇到CLSRSC-400