#!/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)