Question: ```
       for (int rowNum = 1; rowNum < sheet.getLastRowNum(); rowNum++) {
            Row row = sheet.getRow(rowNum);
            Employee instance = methodToGetInstance(parameters);
            originalList.add(instance);
        }
        List<Employee> copy = new ArrayList<>(originalList);
        List<Employee> totalCopy = new ArrayList<>(originalList);
        while (startDate.isBefore(ChronoLocalDate.from(SecurityUtils.now().plusMonths(3)))) {
            int index = 0;
            for (Employee instance : copy) {
                instance.setStartDateTime(startDateTime);       //here i'm updating the value in copyList
                instance.setEndDateTime(startDateTime.plusHours(24));
                totalCopy.add(instance);               
                index++;
            }
        }

```

Here i m updating values in instance which is from Copied List it also affecting the OriginalList.

Please help me to resolve this issue...!!

Answer: 
Firstly, `setTimeout` is static timer that depends on the given time. On the other hand `async await` is something that is not static. It will wait until it awaited function or promise return any `response` or `error`

Secondly, You can `Timeout` any execution but you cannot await any function.

Here is the Official doc [Async await](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function)
Both async await and setTimeout aren't similar eventhough it looks like they are but they aren't.
If you are new to JavaScript then, you can think of setTimeout as a timer, so whatever block of code or function is passed to setTimeout it will execute after a fixed time, it basically delays the execution of code, while on the other hand async await isn't bound to any timer, to understand simply, function or promise that uses async await will wait until the function or promise returns an appropriate response...