#!/usr/bin/env python
#-*- coding:utf-8 -*-
a='abc'
b=a
a='def'
print(b) #这里打印的是abc
#1.执行a = 'abc',解释器创建了字符串'abc'和变量a,并把a指向'ABC'
#2.执行b=a,解释器创建了变量b,并把变量b指向了变量a所指向的abc
#3.执行a = 'def',解释器创建了字符串'def',并把a的指向改为'def',但b并没有更改:
#所以最后打印的是abc
name={
"z":{"age":20,"jx":"tn"},
"h":{"age":20,"jx":"tn"},
"x":2,
}
name2=name
name['z']['age']='22'
print('name is: ',name)
print('name2 is: ',name2)
#结果
# name is: {'z': {'jx': 'tn', 'age': '22'}, 'h': {'jx': 'tn', 'age': 20}}
# name2 is: {'z': {'jx': 'tn', 'age': '22'}, 'h': {'jx': 'tn', 'age': 20}}
#这里相当于做了一个别名,软连接,没有再占用一块内存。这样无论你更改name还是name2都是操作的一份数据。
#跟第一个例子是有区别的,对于字符串和数字一些数据类型的处理,会在内存创建一份新的数据,但list,元组,字典,不会这样处理。
#拷贝第一层
name3=name.copy()
name['x']='原字典改变后'
name['h']['age']='Age'
print(name)
print(name3)
#完全独立的数据,占用和元数据相同大小的内存
import copy
name4=copy.deepcopy(name)