pythonpython值传递问题和内存管理机制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pythonpython值传递问题和内存管理机制相关的知识,希望对你有一定的参考价值。

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时
    ,它被垃圾回收。
    ·内存池:目前暂不讨论


本文出自 “孔小发爱吃鱼” 博客,谢绝转载!

以上是关于pythonpython值传递问题和内存管理机制的主要内容,如果未能解决你的问题,请参考以下文章

垃圾分代回收机制

Java内存分配机制

python内存管理

javascript内存管理(堆和栈)和javascript运行机制

JavaScript性能优化1——内存管理(JS垃圾回收机制引用计数标记清除标记整理V8分代回收Performance使用)

JVM内存结构和垃圾回收