美文网首页鲸落消零派
flutter-Dart中的List的浅拷贝问题

flutter-Dart中的List的浅拷贝问题

作者: 浮华_du | 来源:发表于2021-05-16 19:47 被阅读0次

首先,先写一个小例子,猜猜下面代码会如何打印?

Dart
     List a = ["1","2","3"];
    List b = a;
    print("a=$a");
    print("b=$b");
    b[0] = "0";
    print("a=$a");
    print("b=$b");
    b.removeAt(0);
    print("a=$a");
    print("b=$b");


//I/flutter ( 9805): a=[1, 2, 3]
//I/flutter ( 9805): b=[1, 2, 3]
//I/flutter ( 9805): a=[0, 2, 3]
//I/flutter ( 9805): b=[0, 2, 3]
//I/flutter ( 9805): a=[2, 3]
//I/flutter ( 9805): b=[2, 3]

我们发现,改变b的值,a也会随之改变;改变a的值,b也会改变。
Dart中的List属于浅拷贝

Swift
var a = ["1","2","3"]
var b = a
print(a)
print(b)
b[0] = "0"
print(a)
print(b)
b.remove(at: 0)
print(a)
print(b)
a.remove(at: 0)
print(a)
print(b)

//["1", "2", "3"]
//["1", "2", "3"]
//["1", "2", "3"]
//["0", "2", "3"]
//["1", "2", "3"]
//["2", "3"]
//["1", "3"]
//["2", "3"]

Swift中,如果数组中的元素是整形,字符串,结构体等简单数据类型,那么当你将一个数组赋值给另外的数组时,数组中的元素会被拷贝一份,两个数组中的元素相互独立。(深拷贝)

var bean1 = TestBean()
bean1.num = 1
var bean2 = TestBean()
bean2.num = 2
var list1 = [bean1,bean2]
var list2 = list1
list1[0].num = 100
print(list1[0].num)
print(list2[0].num)


class TestBean{
    var num = 0
}


//100
//100

当数组的元素是类的实例时,简单的将一个数组赋值给另外的数组后,由于两个数组中元素所引用的对象相同,当你改变其中一个数组中元素的属性时,另外的数组中同样引用的元素对应的属性也会随之改变。(浅拷贝)。

浅拷贝(shallowCopy)

只是增加了一个指针指向已存在的内存地址

深拷贝(deepCopy)

是增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的内存
所以,当我们在Dart中使用List的时候,一定要注意这个问题

https://www.jianshu.com/p/cc75a68f336a

相关文章

  • flutter-Dart中的List的浅拷贝问题

    首先,先写一个小例子,猜猜下面代码会如何打印? Dart 我们发现,改变b的值,a也会随之改变;改变a的值,b也会...

  • 11、python常用知识点

    基本数据类型 列表:list list.copy() 涉及到python的拷贝问题,这是python的浅拷贝。那么...

  • 11.Python之深浅拷贝

    Python中的深浅拷贝 浅拷贝浅拷贝只拷贝一个外壳变成自己的,里面的内容是复用的被拷贝对象的。list_1 = ...

  • 2.深拷贝和浅拷贝

    目录1.浅拷贝2.深拷贝 1.浅拷贝 1.1 "="拷贝 list_dest = list_src完全同步,引用指...

  • Python copy

    浅拷贝copy.copy() 深拷贝copy.deepcopy() List Slicing [:]和List转换...

  • java List复制:浅拷贝与深拷贝

    List浅拷贝 众所周知,list本质上是数组,而数组的是以地址的形式进行存储。如上图将list A浅拷贝给lis...

  • C++-03、浅拷贝、深拷贝

    浅拷贝 浅拷贝重复释放空间的问题 深拷贝

  • Python底层|赋值 浅拷贝 深拷贝

    参考 python中的深拷贝和浅拷贝问题python的复制,深拷贝和浅拷贝的区别 结论 总体来说,赋值只是增加了一...

  • PHP之剑走偏锋的DeepCopy

    php的深拷贝和浅拷贝问题,普通变量对象的赋值 = 是深拷贝,& 是浅拷贝。 输出结果: 类对象的拷贝问题就得看下...

  • 【Python】小技巧's

    目录: 1、List等分切割2、三元运算符+多元赋值3、字典的引用、浅拷贝、深拷贝 1、List等分切割 这样就可...

网友评论

    本文标题:flutter-Dart中的List的浅拷贝问题

    本文链接:https://www.haomeiwen.com/subject/pryrjltx.html