zoukankan      html  css  js  c++  java
  • 数据类型、内存与拷贝

    一、数据类型与内存

    静态存储

    python是用c写的,python里的str也是用c写的,但是c语言里默认是没有字符串的,它使用的是字符数组,这种数组只要存在内存就固定占用一定内存,它是不可修改的。
    而使用replace()更改字符串,实际上是又生成了另一个新字符串用作修改,初始的字符串是不变的,它依然存放于内存里。

    动态存储

    list、dict等是动态的,可以记录下一个元素的位置或上一个元素的位置,下面以list为例:

    二、深拷贝与浅拷贝

    int、str

    对数字和字符而言,赋值、浅拷贝与深拷贝都无意义,因为永远指向同一个内存地址:

    import copy    #在使用拷贝时需要导入copy模块
    
    n1 = 123
    print(id(n1))       #4297550464
    
    n2 = n1             #赋值
    print(id(n2))       #4297550464
    
    n3 = copy.copy(n1)  #浅拷贝
    print(id(n3))       #4297550464
    
    n4 = copy.deepcopy(n1)    #深拷贝
    print(id(n4))       #4297550464
    

    list、dict、tuple

    对于list、dict、tuple而言,意义就大不一样了
    * 赋值

    n1 = {'k1': 'he', 'k2': 123, 'k3': ['morra', 456]}
    n2 = n1
    

    * 浅拷贝
    在内存中只额外创建第一层数据

    import copy
    
    n1 = {'k1': 'he', 'k2': 123, 'k3': ['morra', 456]}
    n2 = copy.copy(n1)
    

    * 深拷贝
    在内存中将所有的数据创建一份(最后一层数据除外,这是由python内部对字符串和数字类型的优化导致的)

    import copy​
    
    n1 = {'k1': 'he', 'k2': 123, 'k3': ['morra', 456]}
    n2 = copy.deepcopy(n1)
    

  • 相关阅读:
    Linux 内核开发—内核简单介绍
    strcmp函数和strcpy函数
    POJ 3734
    怎样使用SetTimer MFC 够具体
    java 递归函数
    海量数据存储
    使用WinINet和WinHTTP实现Http訪问
    getline函数
    UDP编程
    数据文件传输通道技术解决方式
  • 原文地址:https://www.cnblogs.com/whatisfantasy/p/5956807.html
Copyright © 2011-2022 走看看