对象内存管理

上一篇 / 下一篇  2019-05-08 10:41:43 / 个人分类:python

# -*- coding: utf-8 -*-
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
# See LICENSE for more details.
#
# Copyright (C) 2016-2017 Huawei Inc
#
# __author__ = 'z00307189'

# '''
# 对象的拷贝分三种:
# 1、对象的复制
# 2、浅拷贝:创建一个新的对象,复制对象中的数据引用
# 3、深拷贝:创建一个新的对象,同时复制对象的属性数据【而不是引用】
# '''
# ''''''
# '''
# 对象的拷贝:对象的复制
# 1. 同一个对象,不同的变量:对象的引用赋值
# '''
class Person:
def __init__(self, name, fav):
self.name = name
self.fav = fav
# # 1. 对象的引用赋值:将同一个对象的引用,赋值给多个变量
# # 多个变量,指向的是同一个对象
# # 注意:引用赋值并不会产生新的对象,而是让多个变量可以共同指向一个对象
# # 通过多个变量都可以操作同一个对象的数据
a = Person("tom", ["LOL", "OW"])
b = c = a
print(id(a))
print(id(b))
print(id(c))

print(id(a.fav))
print(id(b.fav))
print(id(c.fav))

a.fav.append("网球")
print(a.fav)
print(b.fav) # ['LOL', 'OW', '\xe7\xbd\x91\xe7\x90\x83']
print(c.fav) # ['LOL', 'OW', '\xe7\xbd\x91\xe7\x90\x83']
#
#2、对象的拷贝
#浅拷贝:复制了一个对象,复制对象的属性数据的引用
import copy
x = copy.copy(a) #拷贝了a对象,产生了一个对象x
x.fav.append("PUBG")

print(id(a))
print(id(x))

print(a.fav)
print(x.fav) #['LOL', 'OW', '\xe7\xbd\x91\xe7\x90\x83', 'PUBG']

# ###############################################
#深拷贝:复制了一个对象,同时复制一份对象的属性数据【不再是引用】
# import copy
#
# m = Person("tom",["LOL","OW"])
# y = copy.deepcopy(m)
#
# print(id(m.name))
# print(id(y.name))
#
# m.name = 'jim'
# print(m.name)
# print(y.name)
#
# y.fav.append("PUBG")
# print(m.fav)
# print(y.fav)
values=[0,1,2]
values[1]=[1,2]
print values

# https://blog.csdn.net/xinyuski/article/details/84238688
a=[0,[1,2],3]
b=a[:] # low copy
a[0]=8
a[1][1]=9
print(a) # [8, [1, 9], 3]
print(b) # [0, [1, 9], 3]



a = [0, [1, 2], 3]
b = copy.deepcopy(a) # deep copy
a[0] = 8
a[1][1] = 9
print a # [8, [1, 9], 3]
print b # [0, [1, 2], 3]

TAG:

 

评分:0

我来说两句

日历

« 2024-03-29  
     12
3456789
10111213141516
17181920212223
24252627282930
31      

我的存档

数据统计

  • 访问量: 1001
  • 日志数: 12
  • 建立时间: 2019-05-07
  • 更新时间: 2019-05-20

RSS订阅

Open Toolbar