【python】python值传递问题和内存管理机制

1)值传递问题

python中到底是"值传递"还是"引用传递",主要取决于对象是否是可变的.

    1)函数传参:
   ·基本数据类型:int、float、str;元祖属于不可变对象;传递的是"原值"的拷贝
   ·列表、字典、类、类实例属于可变对象;传递的是"值引用"
    
    2)变量复制
   ·python中的变量复制(a=b)也是同样的道理,不可变对象被真正复制;而可变对象只是传递了一个
    "引用"
    例子:
    a = 1
    b = a,此时改变a的值不会改变b的值

2)内存机制

    1)变量值在内存中存放
    ·基本数据类型:int、str、float等,相同的值赋给不同的变量,内存地址是一致的;
    ·列表、元祖、字典,相同的值赋给不同的变量,内存地址是不一致的
    例子:
    a = 1  b = 1  id(a)=id(b) 这个是成立的
    a = [1,2]  b = [1,2]  id(a) = id(b) 这个是不成立的
    
    2)内存管理机制
    ·引用计数:追踪内存中的对象
    当对象被创建时就创建了一个引用计数,当对象不再需要时,这个对象的引用计数为0时
    ,它被垃圾回收。
    ·内存池:目前暂不讨论
时间: 2024-10-09 15:34:16

【python】python值传递问题和内存管理机制的相关文章

深入详解python传值问题及内存管理机制

在比较浅层次上我们通过说明如下问题来进一步深入了解python内存管理机制: python中到底是"传引用"还是"传值"呢??? 这个问题的回答是:看情况.有的是传值,有的是传引用. 判断的依据是看对象的可变性,而这一点又取决于对象的类型.故在python中的说法是对象可变的还是不可变的. 基本数据类型(整型及其他数据类型,字符串)及元组是不可变的,参数传递的是形参,也就是传过来的是原值的一个拷贝,在函数中改变形参的值实参不会发生变化: def func(a) 列表

[转载] python的内存管理机制

本文为转载,原作为http://www.cnblogs.com/CBDoctor/p/3781078.html,请大家支持原作者 先从较浅的层面来说,Python的内存管理机制可以从三个方面来讲 (1)垃圾回收 (2)引用计数 (3)内存池机制 一.垃圾回收: python不像C++,Java等语言一样,他们可以不用事先声明变量类型而直接对变量进行赋值.对Python语言来讲,对象的类型和内存都是在运行时确定的.这也是为什么我们称Python语言为动态类型的原因(这里我们把动态类型可以简单的归结

python的内存管理机制

先从较浅的层面来说,Python的内存管理机制可以从三个方面来讲 (1)垃圾回收 (2)引用计数 (3)内存池机制 一.垃圾回收: python不像C++,Java等语言一样,他们可以不用事先声明变量类型而直接对变量进行赋值.对Python语言来讲,对象的类型和内存都是在运行时确定的.这也是为什么我们称Python语言为动态类型的原因(这里我们把动态类型可以简单的归结为对变量内存地址的分配是在运行时自动判断变量类型并对变量进行赋值). 二.引用计数: Python采用了类似Windows内核对象

《python源码剖析》笔记 pythonm内存管理机制

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 1.内存管理架构 Python的内存管理机制都有两套实现:debug模式和release模式 Python内存管理机制的层次结构: 图16-1 第0层是操作系统提供的内存管理接口,如malloc.free 第1层是Python基于第0层操作系统的内存管理接口包装而成的,主要是为了处理与平台相关的内存分配行为. 实现是一组以PyMem_为前缀的函数族 两套接口:函数和宏. 宏,可以避免函数调

Python内存管理机制

1 概述 对于Python这样的动态语言,如何高效的管理内存,是很重要的一部分,在很大程度上决定了Python的执行效率.与大多数编程语言不同,Python中的变量无需事先申明,变量无需指定类型,程序员无需关心内存管理,Python解释器给你自动回收.我们知道在变量分配内存时,是借用系统资源,在使用完成后,应该归还所借用的系统资源,Python承担了这个复杂的内存管理工作,从而让程序员更加的关注程序的编写质量上. 在执行过程中,Python会频繁的创建和销毁大量的对象,这些都涉及到内存的管理.以

python的内存管理机制(zz)

本文转载自:http://www.cnblogs.com/CBDoctor/p/3781078.html 先从较浅的层面来说,Python的内存管理机制可以从三个方面来讲 (1)垃圾回收 (2)引用计数 (3)内存池机制 一.垃圾回收: python不像C++,Java等语言一样,他们可以不用事先声明变量类型而直接对变量进行赋值.对Python语言来讲,对象的类型和内存都是在运行时确定的.这也是为什么我们称Python语言为动态类型的原因(这里我们把动态类型可以简单的归结为对变量内存地址的分配是

python:深拷贝,浅拷贝,内存管理

深拷贝和浅拷贝都是对象的拷贝,本质的区别是拷贝出来的对象的地址是否和原对象一样,也就是地址的复制还是值的复制的区别. 可变对象:直接在对象所指的地址上把值改了,这个对象依然指向这个地址. 不可变对象:一个对象所指向的地址上的值是不能修改的,如果修改了这个对象的值,它所指向的地址就改变了. 深拷贝就是完全跟以前就没有任何关系了,原来的对象怎么改都不会影响当前对象 浅拷贝,原对象的list元素改变的话会改变当前对象,如果当前对象中list元素改变了,也同样会影响原对象. 内存管理机制 python的

Python的内存管理机制及调优手段

内存管理机制:引用计数.垃圾回收.内存池 引用计数: 引用计数是一种非常高效的内存管理手段,当一个Python对象引用时其引用计数加一,当其不再被一个变量引用时则减一.当引用计数等于0时对象被删除. 1.引用计数: 引用计数也是一种垃圾收集机制,而且也是一种最直观,最简单的垃圾收集技术.当 Python 的某个对象的引用计数降为 0 时,说明没有任何引用指向该对象,该对象就成为要被回收的垃圾了.比如某个新建对象,它被分配给某个引用,对象的引用计数变为 1.如果引用被删除,对象的引用计数为 0,那

(重点)Python深入之Python内存管理机制你会吗?

前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:醍醐三叶 请注意:如果你平时学Python遇到问题找不到人解答?或者没有较全面的教程?可以点我进裙里面都有,自行去拿! 关于python的存储问题 (1)由于python中万物皆对象,所以python的存储问题是对象的存储问题,并且对于每个对象,python会分配一块内存空间去存储它 (2)对于整数和短小的字符等,python会执行缓存机制,即将这些对象进行缓存,不会为