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)
    

  • 相关阅读:
    SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因
    微软BI 之SSIS 系列
    微软BI 之SSIS 系列
    微软BI 之SSIS 系列
    微软BI 之SSIS 系列
    微软BI 之SSIS 系列
    微软BI 之SSAS 系列
    微软BI 之SSRS 系列
    微软BI 之SSRS 系列
    配置 SQL Server Email 发送以及 Job 的 Notification通知功能
  • 原文地址:https://www.cnblogs.com/whatisfantasy/p/5956807.html
Copyright © 2011-2022 走看看