2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
lst1
=
[
"⾦⽑狮王"
,
"紫衫⻰王"
,
"⽩眉鹰王"
,
"⻘翼蝠王"
]
lst2
=
lst1
print
(lst1)
print
(lst2)
lst1.append(
"杨逍"
)
print
(lst1)
print
(lst2)
结果:
[
'⾦⽑狮王'
,
'紫衫⻰王'
,
'⽩眉鹰王'
,
'⻘翼蝠王'
,
'杨逍'
]
[
'⾦⽑狮王'
,
'紫衫⻰王'
,
'⽩眉鹰王'
,
'⻘翼蝠王'
,
'杨逍'
]
dic1
=
{
"id"
:
123
,
"name"
:
"谢逊"
}
dic2
=
dic1
print
(dic1)
print
(dic2)
dic1[
'name'
]
=
"范瑶"
print
(dic1)
print
(dic2)
结果:
{
'id'
:
123
,
'name'
:
'谢逊'
}
{
'id'
:
123
,
'name'
:
'谢逊'
}
{
'id'
:
123
,
'name'
:
'范瑶'
}
{
'id'
:
123
,
'name'
:
'范瑶'
}
|
对于list, set, dict来说, 直接赋值. 其实是把内存地址交给变量. 并不是复制⼀份内容. 所以. lst1的内存指向和lst2是⼀样的. lst1改变了, lst2也发⽣了改变
浅拷⻉
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
lst1
=
[
"何炅"
,
"杜海涛"
,
"周渝⺠"
]
lst2
=
lst1.copy()
lst1.append(
"李嘉诚"
)
print
(lst1)
print
(lst2)
print
(
id
(lst1),
id
(lst2))
结果:
两个lst完全不⼀样. 内存地址和内容也不⼀样. 发现实现了内存的拷⻉
lst1
=
[
"何炅"
,
"杜海涛"
,
"周渝⺠"
, [
"麻花藤"
,
"⻢芸"
,
"周笔畅"
]]
lst2
=
lst1.copy()
lst1[
3
].append(
"⽆敌是多磨寂寞"
)
print
(lst1)
print
(lst2)
print
(
id
(lst1[
3
]),
id
(lst2[
3
]))
结果:
[
'何炅'
,
'杜海涛'
,
'周渝⺠'
, [
'麻花藤'
,
'⻢芸'
,
'周笔畅'
,
'⽆敌是多磨寂寞'
]]
[
'何炅'
,
'杜海涛'
,
'周渝⺠'
, [
'麻花藤'
,
'⻢芸'
,
'周笔畅'
,
'⽆敌是多磨寂寞'
]]
4417248328
4417248328
|
浅拷⻉. 只会拷⻉第⼀层. 第⼆层的内容不会拷⻉. 所以被称为浅拷⻉
深拷⻉
1
2
3
4
5
6
7
8
9
10
11
|
import
copy
lst1
=
[
"何炅"
,
"杜海涛"
,
"周渝⺠"
, [
"麻花藤"
,
"⻢芸"
,
"周笔畅"
]]
lst2
=
copy.deepcopy(lst1)
lst1[
3
].append(
"⽆敌是多磨寂寞"
)
print
(lst1)
print
(lst2)
print
(
id
(lst1[
3
]),
id
(lst2[
3
]))
结果:
[
'何炅'
,
'杜海涛'
,
'周渝⺠'
, [
'麻花藤'
,
'⻢芸'
,
'周笔畅'
,
'⽆敌是多磨寂寞'
]]
[
'何炅'
,
'杜海涛'
,
'周渝⺠'
, [
'麻花藤'
,
'⻢芸'
,
'周笔畅'
]]
4447221448
4447233800
|
都不⼀样了.
深度拷贝. 把元素内部的元素完全进行拷贝复制. 不会产⽣⼀个改变另⼀个跟着 改变的问题 补充⼀个知识点:
最后我们来看⼀个⾯试题:
1
2
3
|
a
=
[
1
,
2
]
a[
1
]
=
a
print
(a[
1
])
|