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: 
`setTimeout` allows you to delay execution for an approximate amount of time.

```js
let log = () => console.log('log');

// invokes `log()` after a delay
setTimeout(log, 1000);
```

`async/await` helps you deal with promises without function handlers; it's just syntactic sugar. It doesn't actually delay execution.

```js
let promise = Promise.resolve(5);

let main = async() => {
  // without await
  promise.then(value => console.log(value));

  // with await
  console.log(await promise);
};

main();
```
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...