در این مطلب، ویدئو مدیریت حافظه در پایتون – مبانی با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
مدت زمان فیلم: 00:30:27
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
00:00:01,140 –> 00:00:02,840
[تشویق حضار]
2
00:00:02,840 –> 00:00:06,000
سلام به همه من نینا زاخارچنکو هستم.
3
00:00:06,000 –> 00:00:07,740
4
00:00:07,740 –> 00:00:09,780
بیش از یک دهه
5
00:00:09,780 –> 00:00:12,120
است که به
6
00:00:12,120 –> 00:00:14,340
صورت حرفه ای به
7
00:00:14,340 –> 00:00:17,190
عنوان مهندس نرم افزار کار می کنم.
8
00:00:17,190 –> 00:00:19,500
مدافع توسعهدهنده ابری به این معنی است که
9
00:00:19,500 –> 00:00:21,720
هدف من این است که استفاده
10
00:00:21,720 –> 00:00:23,430
11
00:00:23,430 –> 00:00:26,220
از اسلایدهای این سخنرانی را در همه جا برای توسعهدهندگان پایتون آسانتر و بهتر در همه جا بهصورت
12
00:00:26,220 –> 00:00:28,560
آنلاین در دسترس قرار دهم، بنابراین یک کپی بگیرید تا آن را
13
00:00:28,560 –> 00:00:30,300
دنبال کنید یا با همکاران خود به اشتراک بگذارید.
14
00:00:30,300 –> 00:00:32,070
از
15
00:00:32,070 –> 00:00:33,329
لینکها و بسیاری از منابع مفید،
16
00:00:33,329 –> 00:00:36,809
17
00:00:36,809 –> 00:00:45,059
اگر میخواهید آنها را از آنجا بگیرید،
18
00:00:45,059 –> 00:00:51,690
19
00:00:51,690 –> 00:00:53,280
پیوندی به آنها توییت
20
00:00:53,280 –> 00:00:58,949
21
00:00:58,949 –> 00:01:00,899
کردم. ببینید آیا این یکی
22
00:01:00,899 –> 00:01:04,039
درست کار می کند، ببینید
23
00:01:12,030 –> 00:01:18,770
اجازه دهید من یک چیز دیگر را امتحان کنم. اگر چیز جدیدی یاد می گیرید، این فناوری را عوض کنید،
24
00:01:21,979 –> 00:01:25,950
اگر همانطور که انتظار
25
00:01:25,950 –> 00:01:29,150
داشتیم کار می کرد، همه ما بیکار می شدیم.
26
00:01:29,150 –> 00:01:32,220
27
00:01:32,220 –> 00:01:33,660
28
00:01:33,660 –> 00:01:36,810
چیزی که در مورد آن هیجانزده هستید، میتوانید
29
00:01:36,810 –> 00:01:38,070
ادامه دهید و با استفاده از هشتگ NBP توییت را به اشتراک بگذارید
30
00:01:38,070 –> 00:01:40,740
چرا نمیتوانید به من اشاره کنید
31
00:01:40,740 –> 00:01:43,740
نام کاربری من نینجا است که مانند نینجا است اما
32
00:01:43,740 –> 00:01:46,680
بدون I و NJ a است.
33
00:01:46,680 –> 00:01:48,930
34
00:01:48,930 –> 00:01:51,509
کمک می کند تا
35
00:01:51,509 –> 00:01:53,369
کد کارآمدتر بنویسید دانش
36
00:01:53,369 –> 00:01:55,020
به شما کمک می کند تا مسائل مربوط به مشکلات کند را
37
00:01:55,020 –> 00:01:57,899
حل کنید برنامه های آهسته که به شما کمک می کند
38
00:01:57,899 –> 00:02:00,119
عیب یابی کنید.
39
00:02:00,119 –> 00:02:01,560
40
00:02:01,560 –> 00:02:03,630
41
00:02:03,630 –> 00:02:05,580
42
00:02:05,580 –> 00:02:07,860
من قصد دارم
43
00:02:07,860 –> 00:02:09,330
ابزارهایی را در اختیار شما بگذارم تا به شما در پاسخ به
44
00:02:09,330 –> 00:02:12,300
این سوال کمک کند و به عنوان یک امتیاز، نوشتن
45
00:02:12,300 –> 00:02:14,010
برنامه های کارآمدتر باعث می
46
00:02:14,010 –> 00:02:19,100
47
00:02:19,100 –> 00:02:21,299
48
00:02:21,299 –> 00:02:23,400
شود تا باهوش به نظر برسید.
49
00:02:23,400 –> 00:02:24,180
50
00:02:24,180 –> 00:02:25,769
شما فقط با
51
00:02:25,769 –> 00:02:28,950
اطلاعات بیش از حد زیادی مواجه هستید و اصطلاحات جدید بسیار زیادی دارند، بنابراین
52
00:02:28,950 –> 00:02:31,010
من قصد دارم واژگان را
53
00:02:31,010 –> 00:02:33,959
همراه با مفاهیم اساسی به شما آموزش دهم، هدف
54
00:02:33,959 –> 00:02:35,790
در اینجا ساختن تصویر قابل درک است
55
00:02:35,790 –> 00:02:37,430
حتی اگر شما تازه شروع کرده اید و
56
00:02:37,430 –> 00:02:39,750
این صحبت به شما
57
00:02:39,750 –> 00:02:43,170
پایه و اساس مناسبی برای غواصی عمیق تر می دهد، آنچه
58
00:02:43,170 –> 00:02:45,900
امروز به خوبی یاد نخواهید گرفت، متأسفانه هیچ یک
59
00:02:45,900 –> 00:02:47,549
از شما احتمالاً در پایان این سخنرانی متخصص نخواهید بود.
60
00:02:47,549 –> 00:02:49,500
61
00:02:49,500 –> 00:02:51,720
جنبه منفی مرور کلی هزار فوتی
62
00:02:51,720 –> 00:02:54,840
و این برای کسانی از شما که
63
00:02:54,840 –> 00:02:56,850
در اتاق متخصص هستند اشکالی ندارد، فقط یک
64
00:02:56,850 –> 00:02:58,590
سلب مسئولیت سریع که این صحبت فقط برای cpython صدق می کند،
65
00:02:58,590 –> 00:03:03,600
شنیدم که در جایی خنده خفه کننده ای شنیدم،
66
00:03:03,600 –> 00:03:08,070
خیلی خوب است، بنابراین واقعاً
67
00:03:08,070 –> 00:03:10,049
درک می کنم که مدیریت حافظه چگونه کار می کند
68
00:03:10,049 –> 00:03:11,519
. پایتون ما باید اینجا کمی
69
00:03:11,519 –> 00:03:13,519
فلسفی شویم و از خود بپرسیم
70
00:03:13,519 –> 00:03:18,510
که یک متغیر چیست در این مثال
71
00:03:18,510 –> 00:03:21,900
ما یک متغیر سبک C داریم، یک
72
00:03:21,900 –> 00:03:23,849
مثال بسیار ساده است، ما دو متغیر
73
00:03:23,849 –> 00:03:25,680
a و B داریم که در آن
74
00:03:25,680 –> 00:03:27,569
مقدار هر دو را به عدد
75
00:03:27,569 –> 00:03:32,340
5 5 تنظیم کنیم. 0 1 در باینری، باید
76
00:03:32,340 –> 00:03:34,230
نوع متغیر را قبل از
77
00:03:34,230 –> 00:03:36,709
تخصیص اعلام کنیم، باید بگوییم int برابر با 5 است،
78
00:03:36,709 –> 00:03:42,629
چرا چون آن مقادیر c-style در
79
00:03:42,629 –> 00:03:45,150
یک سطل اندازه ثابت زندگی می کنند، یک
80
00:03:45,150 –> 00:03:47,700
نگاشت یک به یک متغیر na است. med Q یک
81
00:03:47,700 –> 00:03:50,700
مکان حافظه و یک مقدار ذخیره شده فقط یک
82
00:03:50,700 –> 00:03:53,670
جدول 101 است که بارها و بارها در
83
00:03:53,670 –> 00:03:56,299
هر مکان حافظه کپی می شود زمانی که ما int را
84
00:03:56,299 –> 00:03:59,220
برابر با 5 اعلام می کنیم، به همین دلیل باید
85
00:03:59,220 –> 00:04:02,159
نوع را اعلام کنید تا کامپایلر
86
00:04:02,159 –> 00:04:05,250
بداند که سطل این سطل ها را چقدر بزرگ کند.
87
00:04:05,250 –> 00:04:07,590
فقط می تواند داده های یکسانی را در جایی نگه دارد که
88
00:04:07,590 –> 00:04:12,209
ممکن است خطای سرریز رخ دهد، چه اتفاقی می افتد
89
00:04:12,209 –> 00:04:14,519
که وقتی مقدار متغیر c-style خود را
90
00:04:14,519 –> 00:04:17,459
تغییر می دهیم، مثلاً می گوییم اکنون
91
00:04:17,459 –> 00:04:21,029
مقدار a را در هنگام تغییر
92
00:04:21,029 –> 00:04:23,520
مقدار آن متغیر، داده ها در آن مکان حافظه، روی 6 تنظیم می کنم.
93
00:04:23,520 –> 00:04:28,400
رونویسی می شود، بنابراین اکنون
94
00:04:28,400 –> 00:04:31,800
مقدار 1 1 0 است. من پیش رفتم
95
00:04:31,800 –> 00:04:34,169
و مقدار a را به 6 تغییر دادم بعداً در
96
00:04:34,169 –> 00:04:38,970
برنامه من پایتون نام دارد نه
97
00:04:38,970 –> 00:04:40,400
متغیر.
98
00:04:40,400 –> 00:04:43,470
99
00:04:43,470 –> 00:04:49,650
100
00:04:49,650 –> 00:04:52,380
برچسب برای یک شی هر
101
00:04:52,380 –> 00:04:55,080
شی می تواند نام های زیادی داشته باشد مانند a یا
102
00:04:55,080 –> 00:04:59,099
B X Y و غیره این نام ها به آن شی اشاره می
103
00:04:59,099 –> 00:05:03,360
کنند و به دو
104
00:05:03,360 –> 00:05:05,699
دسته مختلف از اشیاء فکر کنید که ما
105
00:05:05,699 –> 00:05:08,400
اشیاء ساده مانند اعداد و رشته
106
00:05:08,400 –> 00:05:10,770
ها داریم. مقدار خود را ذخیره می
107
00:05:10,770 –> 00:05:14,220
کند هر شی ساده منحصر به فرد
108
00:05:14,220 –> 00:05:16,460
معمولاً فقط یک بار در حافظه ذخیره می شود،
109
00:05:16,460 –> 00:05:19,020
سپس اشیاء کانتینری
110
00:05:19,020 –> 00:05:21,000
مانند لیست های لغت نامه و کلاس های تعریف شده توسط کاربر
111
00:05:21,000 –> 00:05:23,520
داریم که می توانند
112
00:05:23,520 –> 00:05:26,490
ارجاعات را به اشیاء ساده یا حتی
113
00:05:26,490 –> 00:05:29,009
سایر ظروف یا اشیاء نوع کانتینری ذخیره کنند.
114
00:05:29,009 –> 00:05:29,720
115
00:05:29,720 –> 00:05:33,030
یک مرجع یک نام
116
00:05:33,030 –> 00:05:35,190
یا یک شی ظرف است که به
117
00:05:35,190 –> 00:05:38,940
یک شی دیگر اشاره می کند و ما علاقه مندیم
118
00:05:38,940 –> 00:05:39,600
119
00:05:39,600 –> 00:05:41,760
که تعداد ارجاعات به یک
120
00:05:41,760 –> 00:05:44,150
شی خاص را که تعداد مراجع نامیده می شود، حفظ کنیم،
121
00:05:44,150 –> 00:05:46,350
اگر در تلفن خود هستید یا در
122
00:05:46,350 –> 00:05:47,070
لپ تاپ خود هستید،
123
00:05:47,070 –> 00:05:48,870
توصیه می کنم به این بخش توجه کنید
124
00:05:48,870 –> 00:05:51,090
زیرا اساس
125
00:05:51,090 –> 00:05:56,100
بحث است که چگونه
126
00:05:56,100 –> 00:06:00,060
تعداد مراجع را در این مثال بسیار ساده افزایش دهیم، ما
127
00:06:00,060 –> 00:06:03,810
X را روی 300 تنظیم می کنیم که
128
00:06:03,810 –> 00:06:06,410
تعداد مراجع را به مقدار 300 یک نفر افزایش می دهد،
129
00:06:06,410 –> 00:06:08,940
بدانید که در عمل به دلایل مختلف
130
00:06:08,940 –> 00:06:10,470
تعداد ارجاع به یک
131
00:06:10,470 –> 00:06:12,450
شیء خاص در یک برنامه پایتون
132
00:06:12,450 –> 00:06:17,880
همیشه از صفر شروع نمی شود،
133
00:06:17,880 –> 00:06:20,250
ما برنامه خود را داریم، می گوییم x برابر با 300 است و اکنون
134
00:06:20,250 –> 00:06:23,160
می گوییم g y برابر است با 300 به جای
135
00:06:23,160 –> 00:06:25,530
ایجاد یک شکاف جدید در حافظه برای آن
136
00:06:25,530 –> 00:06:28,530
300 مانند مثال قبلی سبک C ما
137
00:06:28,530 –> 00:06:31,590
برای اضافه کردن یک مرجع دیگر به
138
00:06:31,590 –> 00:06:35,400
شی موجود، اکنون
139
00:06:35,400 –> 00:06:41,450
تعداد مراجع را به مقدار 300 به 2 افزایش داده ایم در
140
00:06:41,450 –> 00:06:45,330
این مثال Z داریم. این لیستی است که یکی
141
00:06:45,330 –> 00:06:48,150
از آن اشیاء کانتینری در لیست
142
00:06:48,150 –> 00:06:50,640
ما است که ما دو بار دیگر به 300 ارجاع می دهیم، همانطور
143
00:06:50,640 –> 00:06:53,390
که در اینجا می بینید لزوماً نیازی نیست که مراجع
144
00:06:53,390 –> 00:06:56,460
به صراحت
145
00:06:56,460 –> 00:07:01,320
از طریق یک نام پس از اینکه x y&z
146
00:07:01,320 –> 00:07:03,390
را افزایش داده ایم نامگذاری کنید. تعداد ارجاع
147
00:07:03,390 –> 00:07:10,020
به مقدار 300 در 4 در مجموع اکنون که
148
00:07:10,020 –> 00:07:11,580
ما آموخته ایم چه چیزی تعداد مراجع را افزایش می دهد
149
00:07:11,580 –> 00:07:14,390
چگونه آن را کاهش دهیم
150
00:07:14,390 –> 00:07:17,160
، چند راه مختلف وجود دارد که اولین
151
00:07:17,160 –> 00:07:19,590
راهی که می توانیم انجام دهیم این است که
152
00:07:19,590 –> 00:07:22,500
در این مثال مرجع را تغییر دهیم.
153
00:07:22,500 –> 00:07:26,340
درست است و Y به هیچ، یعنی من
154
00:07:26,340 –> 00:07:29,340
دو مرجع به مقدار 300
155
00:07:29,340 –> 00:07:33,240
را حذف کرده ام، تعداد مراجع را به 300
156
00:07:33,240 –> 00:07:34,290
در 2 کاهش داده
157
00:07:34,290 –> 00:07:39,420
ام، متأسفم،
158
00:07:39,420 –> 00:07:42,600
اکنون می بینم که مجموع فلش های موجود در
159
00:07:42,600 –> 00:07:46,950
اسلایدهای من نشان داده نمی شود، اما وجود دارد.
160
00:07:46,950 –> 00:07:49,710
چند فلش خاکستری بین x و y و 3 00
161
00:07:49,710 –> 00:07:51,510
به این معنی که آن مراجع
162
00:07:51,510 –> 00:07:53,090
حذف شده اند
163
00:07:53,090 –> 00:07:55,860
یک راه دیگر برای کاهش
164
00:07:55,860 –> 00:07:59,940
تعداد مراجع با کلمه کلیدی del در این
165
00:07:59,940 –> 00:08:02,010
مثال
166
00:08:02,010 –> 00:08:05,100
167
00:08:05,100 –> 00:08:07,100
168
00:08:07,100 –> 00:08:09,840
است. فقط یک مثال در
169
00:08:09,840 –> 00:08:12,450
پایتون شما نیازی به استفاده صریح از
170
00:08:12,450 –> 00:08:16,400
دستور dull برای مدیریت حافظه
171
00:08:17,150 –> 00:08:20,340
ندارید. دستور del دقیقاً چه کاری را به
172
00:08:20,340 –> 00:08:24,930
خوبی انجام می دهد، اشیا را حذف نمی کند.
173
00:08:24,930 –> 00:08:27,300
174
00:08:27,300 –> 00:08:29,550
175
00:08:29,550 –> 00:08:32,030
یک ارجاع به آن شی و این
176
00:08:32,030 –> 00:08:35,250
به نوبه خود تعداد ارجاعات را یک بار کاهش می دهد.
177
00:08:35,250 –> 00:08:44,660
من یک تابع بسیار ساده در اینجا
178
00:08:44,660 –> 00:08:47,760
دارم که آن را اجرا می کنم، چاپ hello
179
00:08:47,760 –> 00:08:50,520
، سلام را با رشته hello برابر می کنم
180
00:08:50,520 –> 00:08:53,970
و سپس آن را چاپ می کنم زیرا
181
00:08:53,970 –> 00:08:55,800
تابع تعداد مراجع را اجرا می کند. به
182
00:08:55,800 –> 00:08:59,460
کلمه hello پس از اجرای آن تابع، یک عدد افزایش می یابد،
183
00:08:59,460 –> 00:09:01,860
184
00:09:01,860 –> 00:09:05,880
متغیر خوشامدگویی ما از محدوده خارج می شود، زمانی که آن
185
00:09:05,880 –> 00:09:07,910
مقدار از محدوده خارج شد،
186
00:09:07,910 –> 00:09:15,780
تعداد مراجع به آن کاهش می یابد، زمانی که دیگر وجود نداشته
187
00:09:15,780 –> 00:09:17,760
باشد. منابعی که ما واقعاً برایمان مهم نیست
188
00:09:17,760 –> 00:09:20,010
که آیا آن شی هنوز وجود دارد، میتوانیم با خیال راحت
189
00:09:20,010 –> 00:09:23,190
آن را برای حافظه حذف کنیم و اینجاست که
190
00:09:23,190 –> 00:09:25,230
باید مراقب فضای نام محلی نسبت به
191
00:09:25,230 –> 00:09:27,930
سراسری باشیم، اگر
192
00:09:27,930 –> 00:09:29,700
وقتی یک شی از محدوده خارج میشود،
193
00:09:29,700 –> 00:09:32,490
چه اتفاقی برای اشیاء موجود میافتد، تعداد بقیه کاهش مییابد.
194
00:09:32,490 –> 00:09:33,540
فضای نام جهانی به
195
00:09:33,540 –> 00:09:36,900
خوبی ممکن است هرگز از محدوده خارج نشوند،
196
00:09:36,900 –> 00:09:39,060
به این معنی که تعداد مراجع آنها
197
00:09:39,060 –> 00:09:44,760
ممکن است هرگز صفر نشود، بنابراین ترفند اینجا این است
198
00:09:44,760 –> 00:09:47,030
که از قرار دادن هر شیء بزرگ یا پیچیده
199
00:09:47,030 –> 00:09:49,980
در فضای نام جهانی خودداری
200
00:09:49,980 –> 00:09:53,150
کنید، زیرا ممکن است دوباره شما را در
201
00:09:53,150 –> 00:09:55,950
داخل هر شی پایتون نگه دارد.
202
00:09:55,950 –> 00:09:59,070
سه چیز است که یک تعداد مرجع تایپ می کند
203
00:09:59,070 –> 00:10:02,330
و مقدار آن
204
00:10:03,220 –> 00:10:06,140
در مثال های قبلی ما دو
205
00:10:06,140 –> 00:10:10,310
نام داشتیم X&Y که منجر به دو ارجاع به
206
00:10:10,310 –> 00:10:13,910
یک شی در حافظه شد این شی
207
00:10:13,910 –> 00:10:15,770
نوع خود را می داند می داند که یک عدد صحیح است
208
00:10:15,770 –> 00:10:18,860
می داند که تعداد مرجع آن 2 بوده است
209
00:10:18,860 –> 00:10:24,200
و می داند که مقدار آن 300 است، اجازه دهید
210
00:10:24,200 –> 00:10:27,200
ثابت کنیم که این مورد است، توجه داشته باشید
211
00:10:27,200 –> 00:10:28,910
که اگر این را در repple امتحان می
212
00:10:28,910 –> 00:10:31,640
کنید، کد خود را در یک تابع بپیچید یا
213
00:10:31,640 –> 00:10:33,500
با اجرای کد آن را امتحان کنید. در یک فایل
214
00:10:33,500 –> 00:10:35,720
چون repple از بهینهسازیهایی استفاده میکند که
215
00:10:35,720 –> 00:10:38,150
در هنگام اجرای یک برنامه پایتون واقعی وجود ندارد
216
00:10:38,150 –> 00:10:40,760
، بنابراین اولین کاری
217
00:10:40,760 –> 00:10:42,740
که انجام میدهم این است که x و y هر دو را
218
00:10:42,740 –> 00:10:45,740
برابر با 300 اعلام میکنم و
219
00:10:45,740 –> 00:10:47,810
سپس با استفاده از هویت به زیر هود نگاه میکنیم.
220
00:10:47,810 –> 00:10:52,550
شناسه تابع مکان و
221
00:10:52,550 –> 00:10:56,690
حافظه یک شی پایتون را به شما می دهد، خواهیم دید که
222
00:10:56,690 –> 00:10:58,340
وقتی ایده X و این
223
00:10:58,340 –> 00:11:02,330
ایده که چرا مقادیر یکسان هستند را چاپ می کنم، همچنین می توانید
224
00:11:02,330 –> 00:11:04,850
از پایتون بپرسید که آیا این دو نام
225
00:11:04,850 –> 00:11:07,720
به یک شی با کلمه کلیدی است
226
00:11:07,720 –> 00:11:10,520
که دو شی را با هم مقایسه می کند تا به ما نشان دهد که آیا
227
00:11:10,520 –> 00:11:11,780
آنها در یک مکان حافظه وجود دارند،
228
00:11:11,780 –> 00:11:14,210
بنابراین اگر مقدار x را y چاپ
229
00:11:14,210 –> 00:11:20,150
کنم، درست می گیرم این همه به
230
00:11:20,150 –> 00:11:23,660
جمع آوری زباله منجر می شود که جمع آوری زباله
231
00:11:23,660 –> 00:11:25,520
چیست، راهی برای یک برنامه است
232
00:11:25,520 –> 00:11:27,770
زمانی که
233
00:11:27,770 –> 00:11:29,900
شیئی که فضای اشغال می کند دیگر مورد استفاده قرار نمی گیرد، به طور خودکار حافظه را آزاد می کند،
234
00:11:29,900 –> 00:11:33,140
برنامه نویسان مجبور بودند
235
00:11:33,140 –> 00:11:35,450
حافظه را به صورت دستی تخصیص داده و تخصیص دهند و
236
00:11:35,450 –> 00:11:40,730
اگر
237
00:11:40,730 –> 00:11:42,650
فراموش کردید که حافظه را آزاد کنید، حافظه به نوعی مکیده است زیرا
238
00:11:42,650 –> 00:11:45,110
اگر اشتباهاً نوشته اید، حافظه نشت می کند.
239
00:11:45,110 –> 00:11:47,570
حافظه برنامه شما می تواند به خوبی خراب شود
240
00:11:47,570 –> 00:11:50,540
جمع آوری زباله برای نجات من دوست
241
00:11:50,540 –> 00:11:52,820
242
00:11:52,820 –> 00:11:54,620
دارم وقتی به بازیافت حافظه فکر می کنم به جمع آوری زباله ها کمی واضح تر فکر می
243
00:11:54,620 –> 00:12:00,170
کنم دو
244
00:12:00,170 –> 00:12:02,630
نوع اصلی جمع آوری زباله وجود دارد، اولی
245
00:12:02,630 –> 00:12:05,180
شمارش مرجع، دومی ردیابی است
246
00:12:05,180 –> 00:12:11,030
و در روشی که پایتون از هر دو استفاده می کند، بنابراین چگونه
247
00:12:11,030 –> 00:12:12,500
کار می کند جمع آوری زباله شمارش مرجع
248
00:12:12,500 –> 00:12:16,040
همانطور که قبل از اضافه
249
00:12:16,040 –> 00:12:18,649
کردن مراجع حذف مشاهده کردیم که تعداد ref
250
00:12:18,649 –> 00:12:20,570
در زمان انتساب افزایش می یابد،
251
00:12:20,570 –> 00:12:24,410
زمانی که مرجع حذف می شود زمانی که
252
00:12:24,410 –> 00:12:26,509
تعداد ref به صفر می رسد کاهش می یابد، می توانیم ادامه دهیم
253
00:12:26,509 –> 00:12:29,029
و شی را حذف کنیم. بدانید که ما
254
00:12:29,029 –> 00:12:31,759
هیچ کاربرد دیگری برای آن نداریم و این
255
00:12:31,759 –> 00:12:33,800
می تواند یک اثر آبشاری جالب ایجاد
256
00:12:33,800 –> 00:12:36,290
کند زیرا وقتی تعداد ref
257
00:12:36,290 –> 00:12:39,259
اشیایی را که آن شی حذف شده
258
00:12:39,259 –> 00:12:41,899
به آنها اشاره می کرد کاهش می دهید اگر تعداد ref آنها
259
00:12:41,899 –> 00:12:44,449
اکنون به صفر رسیده باشد، می توانید
260
00:12:44,449 –> 00:12:47,509
آنها را نیز حذف کنید. اینکه یک عدد
261
00:12:47,509 –> 00:12:49,699
رفرنس به صفر میرسد میتواند باعث پاک شدن بسیاری
262
00:12:49,699 –> 00:12:53,440
از اشیاء از حافظه
263
00:12:54,399 –> 00:12:57,290
شود.
264
00:12:57,290 –> 00:12:59,120
بخشهای خوب
265
00:12:59,120 –> 00:13:01,130
آن اول این است که
266
00:13:01,130 –> 00:13:03,230
پیادهسازی آن زمانی که تعداد ref به صفر میرسد آسان است،
267
00:13:03,230 –> 00:13:05,750
آن اشیا را میتوان فوراً
268
00:13:05,750 –> 00:13:09,970
حذف کرد، اما دارای معایبی نیز هست.
269
00:13:09,970 –> 00:13:13,940
270
00:13:13,940 –> 00:13:16,519
271
00:13:16,519 –> 00:13:19,100
اینکه دادهها
272
00:13:19,100 –> 00:13:22,760
باید در جایی زندگی کنند، یک سربار اجرا نیز وجود دارد
273
00:13:22,760 –> 00:13:26,120
– درست است، زیرا
274
00:13:26,120 –> 00:13:28,250
تعداد مراجع در هر تکلیف تغییر میکند
275
00:13:28,250 –> 00:13:31,819
و متأسفانه
276
00:13:31,819 –> 00:13:34,870
یک جنبه زشت نیز برای شمارش
277
00:13:34,870 –> 00:13:38,139
278
00:13:38,139 –> 00:13:40,519
279
00:13:40,519 –> 00:13:41,990
ارجاع وجود دارد.
280
00:13:41,990 –> 00:13:45,620
شمارش یک شیء در همان زمان
281
00:13:45,620 –> 00:13:48,370
ممکن است به مشکل بزرگی
282
00:13:48,370 –> 00:13:50,540
283
00:13:50,540 –> 00:13:54,670
284
00:13:54,670 –> 00:13:58,160
285
00:13:58,160 –> 00:14:00,529
برسیم.
286
00:14:00,529 –> 00:14:02,990
287
00:14:02,990 –> 00:14:05,959
و حاوی ارجاع به یک گره فرزند است،
288
00:14:05,959 –> 00:14:10,430
بیایید بگوییم در اینجا سه
289
00:14:10,430 –> 00:14:13,670
یک نت ریشه یک گره چپ و یک گر
290
00:14:13,670 –> 00:14:17,360
راست اعلام می کنیم. گره ریشه را
291
00:14:17,360 –> 00:14:19,939
در گره چپ خود قرار دهید، گره چپ ما را در گره
292
00:14:19,939 –> 00:14:23,180
راست و گره راست ما را به
293
00:14:23,180 –> 00:14:25,689
سمت
294
00:14:26,030 –> 00:14:29,540
چپ برگردانید.
295
00:14:29,540 –> 00:14:32,510
296
00:14:32,510 –> 00:14:36,530
297
00:14:36,530 –> 00:14:39,110
ارجاع آن را به شما از طریق مسیر نامگذاری کنید
298
00:14:39,110 –> 00:14:41,870
و همچنین به
299
00:14:41,870 –> 00:14:45,350
گره سمت راست ارجاع
300
00:14:45,350 –> 00:14:47,420
دهید، تعداد ارجاع سمت راست دو است
301
00:14:47,420 –> 00:14:51,890
و در گره چپ یک چرخه زمانی رخ می دهد
302
00:14:51,890 –> 00:14:55,400
که دو شی به یکدیگر اشاره کنند یا به یکدیگر اشاره کنند
303
00:14:55,400 –> 00:15:01,250
و هیچ چیز دیگری وجود ندارد. چه اتفاقی میافتد وقتی
304
00:15:01,250 –> 00:15:04,250
نامها را بهعنوان ارجاع به
305
00:15:04,250 –> 00:15:07,520
این یادداشتها حذف میکنیم که آنها را del unroot چپ و راست مینامیم، به
306
00:15:07,520 –> 00:15:10,820
این معنی که نامهای ریشه
307
00:15:10,820 –> 00:15:12,560
چپ و راست دیگر به گرههای جدید اشاره نمیکنند،
308
00:15:12,560 –> 00:15:15,530
اما
309
00:15:15,530 –> 00:15:19,190
ارجاعهای داخلی که در فرزند ذخیره شدهاند
310
00:15:19,190 –> 00:15:23,090
هنوز وجود دارند. تعداد ref ریشه
311
00:15:23,090 –> 00:15:26,690
صفر است اما تعداد ref در سمت چپ و راست
312
00:15:26,690 –> 00:15:30,980
یک باقی می ماند زیرا آن گره ها همچنان
313
00:15:30,980 –> 00:15:33,770
به یکدیگر ارجاع می دهند در این مرحله آن
314
00:15:33,770 –> 00:15:35,870
اشیا دیگر از برنامه قابل دسترسی نیستند
315
00:15:35,870 –> 00:15:38,180
زیرا آن نام ها
316
00:15:38,180 –> 00:15:41,710
به آنها از بین رفته اند
317
00:15:41,710 –> 00:15:44,860
شمارش مرجع، جمع
318
00:15:44,860 –> 00:15:48,050
آوری زباله به تنهایی اشیاء را با ارجاعات چرخه ای جمع آوری نمی کند.
319
00:15:48,050 –> 00:15:51,920
320